HttpApplication 事件执行顺序
之前做了一段ASP.NET,但都是用微软的控件在实现,并没有了解这些东西,事隔多年后,现在再做发现不能仅为功能而做功能,同事也很惭愧,对ASP.NET原理一直没弄明白,补习一下知识,在学习HttpModule时可以订阅这些事件,所以在此温习一下,并了解一下在一个应用程序域中的执行顺序:
简介:
HttpApplication类的实例(Global继承自该类)是在ASP.NET基础上构建的,不是由我们自己构建的,当然用HttpModule的好处也在于可以将功能独立到其它类库中,HttpApplication类在一个生命周期中用于处理多个请求,但一次只能处理一个请求。这样,成员变量才能存储针对某个请求的数据。
经测试:若有多个模块都订阅了以下事件,执行的顺序按Web.config中HttpModul节点的配置顺序执行。
请求执行的顺序:
-
BeginRequest(在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生)
-
AuthenticateRequest (当安全模块已建立用户标识时发生。注:AuthenticateRequest 事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。预订 AuthenticateRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证。)
-
PostAuthenticateRequest (注意:该事件在 .NET Framework 2.0 版中是新增的。 当安全模块已建立用户标识时发生。PostAuthenticateRequest 事件在AuthenticateRequest 事件发生之后引发。预订 PostAuthenticateRequest 事件的功能可以访问由 PostAuthenticateRequest 处理的任何数据。)
-
AuthorizeRequest (当安全模块已验证用户授权时发生。AuthorizeRequest 事件发出信号表示 ASP.NET 已对当前请求进行了授权。预订AuthorizeRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证和授权。)
-
PostAuthorizeRequest (.NET 2.0里新增的事件。在当前请求的用户已获授权时发生。PostAuthorizeRequest 事件发出信号表示 ASP.NET 已对当前请求进行了授权。预订PostAuthorizeRequest 事件可确保在处理附加的模块或处理程序之前对请求进行身份验证和授权。)
-
ResolveRequestCache (当 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过事件处理程序(例如某个页或 XML Web services)的执行。)
-
PostResolveRequestCache (在 ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。)在 PostResolveRequestCache事件之后、PostMapRequestHandler 事件之前创建一个事件处理程序(对应于请求 URL 的页)。
-
PostMapRequestHandler
-
PreRequestHandlerExecute(执行事件处理程序。)
-
PostReleaseRequestState (在PostReleaseRequestState 事件之后,响应筛选器(如果有)将对输出进行筛选。)