HttpHandler和HttpModule.docx

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
选择HttpHandler还是HttpModule? 最近收到几个疑问:HttpHandler和HttpModule之间有什么差别,我到底该选择哪个? 之所以有这个疑问,是因为在这二类对象中都可以访问Request, Response对象,都能处理请求。 本文约定: 1. HttpHandler泛指所有实现IHttpHandler接口的类型。 2. HttpModule泛指所有实现IHttpModule接口的类型。 因此,本文将不会特别区分这些类型与接口。 理解ASP.NET管线 HttpHandler和HttpModule,它们都与ASP.NET管线有关,所以我想理解这二类对象必须要理解ASP.NET管线的工作方式。 下图反映了ASP.NET管线的处理流程: 这是一张时序图,我们应该从二个角度来理解它: 1. 有哪些调用动作。2. 有哪些参与者。 每个调用动作,都反映了ASP.NET管线的处理阶段,它们会引发相应的事件(除GetHandler,ProcessRequest之外), HttpModule则会订阅这些事件,参与到管线处理过程。这些阶段中,有些阶段还引发了二个事件,完整的管线事件可参考MSDN文档: 在处理该请求时将由?HttpApplication?类执行以下事件。?希望扩展?HttpApplication?类的开发人员尤其需要注意这些事件。 ? 1.?对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。?有关更多信息,请参见?ValidateRequest?和脚本侵入概述。 ? 2.?如果已在?Web.config?文件的?UrlMappingsSection?节中配置了任何?URL,则执行?URL?映射。 ? 3.?引发?BeginRequest?事件。 ? 4.?引发?AuthenticateRequest?事件。 ? 5.?引发?PostAuthenticateRequest?事件。 ? 6.?引发?AuthorizeRequest?事件。 ? 7.?引发?PostAuthorizeRequest?事件。 ? 8.?引发?ResolveRequestCache?事件。 ? 9.?引发?PostResolveRequestCache?事件。 ? 10.?根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现?IHttpHandler?的类,对请求进行处理。?如果该请求针对从?Page?类派生的对象(页),并且需要对该页进行编译,则?ASP.NET?会在创建该页的实例之前对其进行编译。 ? 11.?引发?PostMapRequestHandler?事件。 ? 12.?引发?AcquireRequestState?事件。 ? 13.?引发?PostAcquireRequestState?事件。 ? 14.?引发?PreRequestHandlerExecute?事件。 ? 15.?为该请求调用合适的?IHttpHandler?类的?ProcessRequest?方法(或异步版?IHttpAsyncHandler.BeginProcessRequest)。?例如,如果该请求针对某页,则当前的页实例将处理该请求。? ? 16.?引发?PostRequestHandlerExecute?事件。 ? 17.?引发?ReleaseRequestState?事件。 ? 18.?引发?PostReleaseRequestState?事件。 ? 19.?如果定义了?Filter?属性,则执行响应筛选。 ? 20.?引发?UpdateRequestCache?事件。 ? 21.?引发?PostUpdateRequestCache?事件。 ? 22.?引发?EndRequest?事件。 ? 23.?引发?PreSendRequestHeaders?事件。 ? 24.?引发?PreSendRequestContent?事件。?? 图片中还反映了ASP.NET的三种主要的参与者: 1. HttpModule;2. HttpHandlerFactory;3. HttpHandler 有没有有想过:这三种参与者中,每种有多少个参与对象呢? 为了清楚地回答这个问题,我准备了下面的表格: 为什么要引入HttpHandlerFactory呢? 请看我的博客? HYPERLINK /fish-li/archive/2012/01/29/2331477.html \t _blank 细说 HttpHandler 的映射过程,今天就不重复这块内容了。 除开HttpHandlerFactory,我们可以发现:在ASP.NET管线中,HttpHandler应该只有一个,而HttpModule是可选的。 进而,我们是不是可以这

文档评论(0)

jixujianchi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档