asp.net生命周期的管道事件-ihttpmodule,在客户端发送请求的时候,是要通过asp.net的管道事件
原理
1.HTTP.SYS(是操作系统的核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯)接收到Http请求[是对该web应用的第一次访问]
2.AppDomianFactory为该web应用创建一个应用程序域(AppDomain)
3.IsapiRuntime运行时被加载,首先它会创建一个IsapiWorkerRequest对象(用于封装Http请求)并传递给HttpRuntime,至此正式进入管道
4.HttpRuntime会创建表示Http请求的上下文对象:HttpContext
5.HttpRuntime会利用HttpApplicationFactory创建新的或者获取现有的HttpApplication对象(ASP.NET维护着一个HttpApplication对象池,HttpApplicationFactory从池中选取可用的HttpApplication用户处理HTTP请求,处理完毕后将其释放到对象池中。HttpApplicationFactory负责处理当前的HTTP请求。)
6.在HttpApplication初始化过程中,会根据配置文件加载并初始化相应的HttpModule对象(对于HttpApplication来说,在它处理HTTP请求的不同的阶段会触发不同的事件(Event),而HttpModule的意义在于通过注册HttpApplication的相应的事件,将所需的操作注入整个HTTP请求的处理流程。ASP.NET的很多功能,比如身份验证、授权、缓存等,都是通过相应的HttpModule实现的。)
7.最终完成对HTTP请求的处理实现在另一个重要的对象中:HttpHandler,对于不同的资源类型,具有不同的HttpHandler。
管线事件简易说明
在asp.net的页面生命周期里面,一共有24个管线事件,完整的管线事件可参考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管线事件说明