zoukankan      html  css  js  c++  java
  • 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法

    最近在做我们单位的内部一个系统,使用了类似于Asp.Net 2.0里面的Theme(主题)的功能。此功能的核心是一个动态的CSS定义,根据用户选择的不同主题内容来发送不同的CSS样式文本。
    本来这个问题很好解决,在HTML中的<head>区内使用一个:
    <%#= base.GetCssInclude() %>
    就可以解决,不过我没有用这个办法。

    我注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。后来查了一下.Net SDK文档,发现Asp.Net1.1也支持.ashx,但是没有给出详细内容。

    我们都知道,HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。

    利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。

    建立方法如下:
    首先打开一个Web项目,然后在任意目录下使用VS2003解决方案资源管理器的“添加”-->“添加新项”,在对话框中选择“文本文件”,然后在文件名处输入“TextBuilder.ashx”。

    然后在同目录下,使用解决方案资源管理器,使用“添加”-->“添加类”,在类文件名处输入“TextBuilder.ashx.cs”。可以看出,它的文件命名规律与.aspx文件相同。

    然后在.cs文件处输入以下代码(名称空间略):
    using System.Web
    public sealed class TextBuilder : IHttpHandler
    {
        
    public void ProcessRequest(HttpContext context)
        
    {
            context.Response.ClearContent();
            context.Response.ContentType 
    = "text/plain";
            context.Response.Write(
    "Hello World");
            context.Response.End();
        }


        
    public bool IsReusable
        
    {
            
    get return true; }
        }

    }

    然后在“TextBuilder.ashx”文件的第一行处输入上面这个类的调用代码:
    <%@ WebHandler language="C#" Class="MyNamespace.TextBuilder" codebehind="TextBuilder.ashx.cs" %>
    上面的代码需要注意的是:必须在Class项中输入类的完整名称,即包括名称空间及类名称。

    最后保存并编译项目。

    使用IE测试,输入这个.ashx的地址即可。

    大家可以看出Response类有个OutputStream方法,可以向客户端输出二进制数据流,所以在我的项目中,使用这个方法,在一个.ashx中使用DundasChart控件就可以生成非常好的统计图,用它发送二进制数据,方便快捷,而且不需在web.config内输入任何配置代码。

    .ashx文件有个缺点,他处理控件的回发事件非常麻烦,比如说如果用它来生成DataGrid的列表也不是不行,但是处理数据的回发,需要一些.aspx页的功能,只有自己手动处理这些功能。所以,一般使用.ashx,用来输出一些不需要回发处理的项目即可。
  • 相关阅读:
    Spring中的Bean相关问题
    请谈一下spring bean的生命周期
    请谈一谈IOC中的继承和Java中的继承有什么区别
    谈谈你对Spring IOC和DI的理解,以及它们的区别
    Spring中用到了哪些设计模式
    JAVA自学笔记11
    JAVA自学笔记14
    JAVA自学笔记12
    JAVA自学笔记15
    JAVA自学笔记18
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/630643.html
Copyright © 2011-2022 走看看