笑望人生
微笑面对人生,开心享受生活。
使用.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,用来输出一些不需要回发处理的项目即可。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2005-01-22 16:47
笑望人生
阅读(12448)
评论(14)
编辑
收藏
评论
1342625
#1楼
回复
引用
查看
这种方法同使用一个aspx页面没有什么不同阿。当我使用aspx页面的时候,也可以使用Response.Write的方法输出二进制内容阿
2005-01-22 18:29
|
红马天下
#2楼
[
楼主
]
回复
引用
查看
但是.aspx要做html控件树解析,它的.aspx包含的所有html实际上是一个类,所有的html都是类里面的成员,这个过程在.ashx是不需要的。
2005-01-22 19:23
|
笑望人生
#3楼
回复
引用
这个有新意!
2005-01-22 19:42
|
Ariel[未注册用户]
#4楼
回复
引用
感觉这里用ashx文件并不是*.ashx的初衷,我想问一下,通常ashx做什么用的
2005-05-08 15:52
|
tt
#5楼
回复
引用
微软文档
------------------------------
在 ASP.NET 中,主要使用两种方法来创建 HTTP 处理程序。第一种是通过创建带有 ASHX 扩展名的文件,另一种是创建实现 System.Web.IHttpHandler 的类,请参阅 IHttpHandler Interface。本文将着重介绍第二种形式。要创建 HTTP 处理程序,需要创建一个程序集(通常是一个代码库项目)和一个实现 System.Web.IHttpHandler 的类。然后将该类注册到 Web.Config(或 machine.config)文件中,然后它就可以接收请求了。如果查看 machine.config 文件(在相应命名的 httpHandlers 节中),将看到许多当前已注册的 HTTP 处理程序,包括 System.Web.UI.PageHandlerFactory(ASP.NET 页面的主处理程序)。在编写 HTTP 处理程序时,其实就是在定义处理请求的新方法。
-------------------------------------
aspx也可以实现相同的效果,但稍微麻烦一点,需要更改web.config文件,
2005-05-13 10:55
|
小峰[未注册用户]
#6楼
回复
引用
可是还是不知道怎么实现CSS的自动换,这个东西怎么自动调用呢?
2005-08-17 11:23
|
dfs[未注册用户]
#7楼
回复
引用
查看
我觉得用在XMLHTTP上返回数据是个好方法!!!
别的我就想不出有什么好的了
2006-04-21 15:16
|
感觉
#8楼
回复
引用
查看
请问从那里可以得到微软关于ashx的文档?
谢谢
2006-08-25 12:39
|
stswordman
#9楼
回复
引用
好,收藏。
2007-01-09 11:20
|
虫子[匿名][未注册用户]
#10楼
回复
引用
始终就没有用过 谢谢了
2007-02-04 22:52
|
net[未注册用户]
#11楼
回复
引用
想做RSS feed的了
这个太有用了
按自己的意思返回文档
没有html那些东西
好东西啊
2007-09-04 22:04
|
李洪印[未注册用户]
#12楼
回复
引用
查看
受用了哈
2008-03-13 08:57
|
bigbigdonet
#13楼
回复
引用
查看
--引用--------------------------------------------------
感觉: 我觉得用在XMLHTTP上返回数据是个好方法!!!
别的我就想不出有什么好的了
--------------------------------------------------------
同感
2008-03-31 10:20
|
kkun
#14楼
回复
引用
查看
这个真是好东西
可以用在图片输出和ajax
2008-10-16 16:18
|
cloudgamer
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
最想要的Entity Framework功能
·
专访Jeffrey Richter:Windows 8是微软的重中之重
·
《福布斯》:谷歌进军硬件产品 难撼动苹果地位
·
美国空军拟最多购买1.8万台iPad 2
·
分析称专利之争让谷歌苹果两败俱伤
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
导航
博客园
首页
新随笔
联系
订阅
管理
公告
昵称:
笑望人生
园龄:
7年4个月
粉丝:
2
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
目前的工作(10)
(rss)
写程序的心得和感想。(12)
(rss)
随笔档案
2011年3月 (1)
2007年10月 (1)
2007年9月 (1)
2007年1月 (1)
2006年12月 (2)
2006年8月 (2)
2006年5月 (2)
2006年2月 (1)
2005年9月 (1)
2005年2月 (1)
2005年1月 (2)
2004年12月 (1)
2004年11月 (1)
2004年10月 (3)
文章分类
Dot Net 中的安全管理
(rss)
相册
桌面抓图
朋友网站
恩电博客
(rss)
最新评论
推荐排行榜