我也总结HttpModule和HttpHandler
园子里这方面的帖子太多了,我从个人的使用方面简单总结一下:
HttpModule
可以用在权限控制、或者AOP方面,使用方法很简单,
1、写一个类来实现IhttpModule
IhttpModule借口有两个方法,Dispose和Init,Dispose可以不管,Init用来注册HttpModule事件,
HttpModule事件有很多,有:
BeginRequest | 指示请求处理开始 |
AuthenticateRequest | 封装请求身份验证过程 |
AuthorizeRequest | 封装检查是否能利用以前缓存的输出页面处理请求的过程 |
ResolveRequestCache | 从缓存中得到相应时候触发 |
AcquireRequestState | 加载初始化Session时候触发 |
PreRequestHandlerExecute | 在Http请求进入HttpHandler之前触发 |
PostRequestHandlerExecute | 在Http请求进入HttpHandler之后触发 |
ReleaseRequestState | 存储Session状态时候触发 |
UpdateRequestCache | 更新缓存信息时触发 |
EndRequest | 在Http请求处理完成的时候触发 |
PreSendRequestHenaders | 在向客户端发送Header之前触发 |
PreSendRequestConternt | 在向客户端发送内容之前触发 |
我觉得主要就BeginRequest,EndRequest,请求开始和结束时做一些处理。
AcquireRequestState,PreRequestHandlerExecute,这两个方法都可以用session了,可以用来做权限验证。
2、在config的httpModules里增加它的引用。
httpModules处理程序可以有多个,按顺序执行。
用httpModules可以中止此次HttpRequest请求,application.CompleteRequest();
HttpHandler
可以用来处理图片文件;
不宜用来做权限,因为HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。
使用方法:
1、写一个类来实现IhttpHandler
有两个方法:IsReusable、ProcessRequest,主要是后者,它是放我们的处理程序。
2、在config的httpHandlers里增加它的引用。
3、使用IHttpHandler工厂
写一个类来实现IHttpHandlerFactory,再其TestHandlerFactory方法里生成一个具体的httpHandler对象。
两者结合可以
当Http 请求进入到HttpRuntime 时,首先会交由一个HttpModule的处理链一次处理,处理先后顺序和配置顺序一致(其实也应该是事件订阅的先后顺序),该HttpModule处理完毕后,HttpHandler Factory 会获取所有注入的HttpHandler,根据路径匹配出相应的Handler,反射生成相应Handler实例并调用其ProcessRequest方法。
参考:
http://www.cnblogs.com/cyan/archive/2009/02/04/1383580.html
http://www.cnblogs.com/linecheng/archive/2011/12/14/2287822.html
http://www.cnblogs.com/tangself/archive/2011/03/28/1998007.html
http://www.cnblogs.com/alvinlee/archive/2012/01/12/2320234.html