HttpApplication 类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。使用 HttpApplication

应用程序引发的事件可以由实现 IHttpModule 接口的自定义模块处理,也可以由 Global.asax 文件中定义的事件处理程序代码处理。可以将实现 IHttpModule 接口的自定义模块放在 App_Code 文件夹中,也可以放在 Bin 文件夹下的某个 DLL 中。

.NET Framework 3.5 版中引入了 HttpApplication。有关更多信息,请参见 。



注意:

如果 IIS 7.0 在集成模式下运行,App_Code 文件夹或 Bin 文件夹中的自定义模块将应用于请求管线中的所有请求。Global.asax 文件中的事件处理程序代码则只应用于映射到某个 ASP.NET 处理程序的请求。



按照以下顺序引发应用程序事件:

  1. BeginRequest
  2. AuthenticateRequest
  3. PostAuthenticateRequest
  4. AuthorizeRequest
  5. PostAuthorizeRequest
  6. ResolveRequestCache
  7. PostResolveRequestCache
    在 PostResolveRequestCache 事件之后和 PostMapRequestHandler 事件之前,会创建一个事件处理程序(一个对应于请求 URL 的页)。如果服务器在集成模式下运行 IIS 7.0 并且 .NET Framework 至少为 3.0 版本,则会引发 MapRequestHandler 事件。如果服务器在经典模式下运行 IIS 7.0 或者运行的是较早版本的 IIS,则无法处理此事件。
  8. PostMapRequestHandler
  9. AcquireRequestState
  10. PostAcquireRequestState
  11. PreRequestHandlerExecute
    在此事件之后执行事件处理程序。
  12. PostRequestHandlerExecute
  13. ReleaseRequestState
  14. PostReleaseRequestState
    在引发 PostReleaseRequestState 事件之后,现有的所有响应筛选器都将对输出进行筛选。
  15. UpdateRequestCache
  16. PostUpdateRequestCache
  17. LogRequest.
    仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。
  18. PostLogRequest
    仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。
  19. EndRequest

执行顺序如图:

 

特别注意:

注意一个HttoModule和HttpApplication事件中的重点:

      Response.End()或HttpApplication.CompleteRequest()会在HttpApplication和Module的事件链中”抄近道”.
  当创建HttpModule或者在Global.asax中实现事件钩子的时候,当你调用Response.End或 Appplication.CompleteRequest的时候要特别注意.这两个函数都结束当前请求并停止触发在HTTP管道中后续的事件,然后发生将控制返回到Web服务器中.当你在处理链的后面有诸如记录日志或对内容进行操作的行为时,因为他们没有被触发,有可能使你上当.例如,如果调用Response.End()的话,EndRequest事件并不会被触发.