IHttpModule & IHttpHandler

IHttpModule是绿叶,IHttpHandler是花 IHttpHandler按照你的请求生成响应的内容,IHttpModule对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理。 

 

 

可能的情形

假 定某组用户在运行某 Web 应用程序的一个个性化版本,并且该应用程序需要一些远程调试或分析。您不能中断服务,但仍需要了解发生的情况。有了性能计数器和内置的跟踪功能可能还不 够。所部署的 ASP.NET 页面有可能根本没有包含或启用跟踪指令。在这种情况下,您需要进行远程干预,注入跟踪代码,这是最基本的要求。
还有一种情形,就是需要临时更改多种页面。对于单个页面,您只需创建旧页面的一个副本并替换它即可。不过,更新多个页面可能就比较困难了,并且维护工作也可能及其复杂。
第三种情形,就是企业策略禁止对源代码进行写操作。在这种情况下,源代码可读,但不可修改。不过,您可以向站点添加扩展。
最后一种情形,也是最复杂并且我真的遇到过的一种情形,即公司运行的 Web 应用程序的源代码由于某种原因不再可用。
可以看出,需要在不访问源代码的情况下修改页面的运行时行为的情形非常多。那么接下来该怎么办呢?

可行的方法

有许多方法可以在不接触源代码的情况下修改正在运行的 ASP.NET 页面。图 1 列出了几种方法。不是所有的方法在任何情形下都有效,而且有些方法可以一起使用。有的方法可能需要编写新的 HTTP 模块或 HTTP 处理程序,有的方法则可能要求对 web.config 文件进行更改。

 

方法 实现
访问控件树 HTTP 模块
修改页面基类 web.config
控件替换 web.config
构建提供程序 程序集
重定向页面 HTTP 处理程序
重写页面 HTTP 处理程序或 URL 重写

 

 

 

每个 ASP.NET 请求的处理都需要一个专用组件,即 HTTP 处理程序。当在应用程序生命周期内触发 PostMapRequestHandler 事件时,可引用负责处理当前请求的 HTTP 处理程序。

 

 

Code pieces:


Code

 

Code

 

 HandlerTest.ashx

Code

 

Code

 


posted @ 2009-05-11 15:39  Ready!  阅读(341)  评论(0编辑  收藏  举报