*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。

摘要:
我注意了VS2005中Web应用程序项目模板里的GenericHandler项,发现它是一个.ashx文件,实际上它是一个HttpHandler。我们都知道,HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。可以看出,它的文件命名规律与.aspx文件相同。使用IE测试,输入这个.ashx的地址即可。
最近在做我们单位的内部一个系统,使用了类似于Asp.Net 2.0里面的Theme(主题)的功能。此功能的核心是一个动态的CSS定义,根据用户选择的不同主题内容来发送不同的CSS样式文本。
本来这个问题很好解决,在HTML中的<head>区内使用一个:
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第1张<%#=base.GetCssInclude()%>
就可以解决,不过我没有用这个办法。
我注意了VS2005中Web应用程序项目模板里的GenericHandler 项,发现它是一个.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文件处输入以下代码(名称空间略):
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第2张{
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张
publicvoidProcessRequest(HttpContextcontext)
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第4张*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第5张
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第2张{
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张context.Response.ClearContent();
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张context.Response.ContentType
="text/plain";
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张context.Response.Write(
"HelloWorld");
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张context.Response.End();
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第11张}

*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第3张
publicboolIsReusable
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第4张*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第5张
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第2张{
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第4张*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第5张
get*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第2张{returntrue;}
*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第11张}

*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第21张}

然后在“TextBuilder.ashx”文件的第一行处输入上面这个类的调用代码:
<%*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。第2张@WebHandlerlanguage="C#"Class="MyNamespace.TextBuilder"codebehind="TextBuilder.ashx.cs"%>
上面的代码需要注意的是:必须在Class项中输入类的完整名称,即包括名称空间及类名称。
最后保存并编译项目。
使用IE测试,输入这个.ashx的地址即可。
大家可以看出Response类有个OutputStream方法,可以向客户端输出二进制数据流,所以在我的项目中,使用这个方法,在一个.ashx中使用DundasChart控件就可以生成非常好的统计图,用它发送二进制数据,方便快捷,而且不需在web.config内输入任何配置代码。
.ashx文件有个缺点,他处理控件的回发事件非常麻烦,比如说如果用它来生成DataGrid的列表也不是不行,但是处理数据的回发,需要一些.aspx页的功能,只有自己手动处理这些功能。所以,一般使用.ashx,用来输出一些不需要回发处理的项目即可。

免责声明:文章转载自《*引使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SharePoint中获取当前登录的用户名CMS垃圾收集器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

接口测试中抓包工具的使用

在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切。常见的抓包工具有Charles和Fiddler, Fiddler只能用在Windows平台, 而Charles可用于Windows, Mac, IOS和Android多平台。下面就总结一下Charles的用法。 一、Web抓取   Ch...

flask设置cookie,设置session,模拟用户认证、模拟管理后台admin、模拟用户logout --

设置cookie HTTP协议是无状态的,在一次请求响应结束后,服务器不会留下关于客户端状态的信息。但是对于某些web程序来说,客户端的信息有必要被记住,比如用户的登录状态,这样就可以根据用户的状态来返回不同的响应。为了解决这个问题就有cookie技术 。cookie技术通过在请求和响应报文中添加cookie数据来保存客户端的状态信息。 cookie值we...

android 判断网络 网络监控

获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 1)判断是否有网络连接 复制代码 代码如下: public boolean isNetworkConnected...

蓝牙的OBEX协议

1.概述     OBEX为Object Exchange,用于在蓝牙设备间传数据对象,来源于红外定义的协议,后被蓝牙采用。OBEX在蓝牙协议层中的位置如下图(在之前的OBEX版本中,OBEX是通过RFCOMM挂在L2CAP上的): 2.Object Model     OBEX定义了Object model来进行数据的交换,形式为Request-Re...

冷饭新炒:理解JDK中UUID的底层实现

前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符。对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述: UUID(也称为GUID)定义了统一资源名称命名空间。UUID的长度为128...

基于Boost库的HTTP Post函数

两个函数的区别: 提交表单数据和提交文本数据 表单数据: request_stream << "Content-Type: application/x-www-form-urlencoded "; 文本数据: request_stream << "Content-Type: text/html "; #include <i...