我也总结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

posted @ 2012-04-28 19:54  日暮乡关何处是  阅读(351)  评论(0编辑  收藏  举报