HTTPModule事件执行顺序?

有没有人知道一个网站或页面,或知道HTTPApplication类的HTTPModule事件执行事件的执行顺序?

我发现所有事件的MSDN文档 ,但没有显示过程步骤的列表,我一直没能find一个。

也许这有帮助

http://support.microsoft.com/kb/307985/en-us/

HttpApplication类提供了许多模块可以同步的事件。 以下事件可用于模块在每个请求上进行同步。 这些事件按顺序列出:

  1. 的BeginRequest
  2. AuthenticateRequest
  3. 的AuthorizeRequest
  4. ResolveRequestCache
  5. 的AcquireRequestState
  6. 的PreRequestHandlerExecute
  7. PostRequestHandlerExecute
  8. ReleaseRequestState
  9. 的UpdateRequestCache
  10. EndRequest

以下事件可供模块与每个请求传输进行同步。 这些事件的顺序是非确定性的。

  • PreSendRequestHeaders
  • PreSendRequestContent
  • 错误

请参阅文章的完整信息。

MSDN Library文档:

  • IIS 5.0和6.0的ASP.NET应用程序生命周期概述
  • IIS 7.0的ASP.NET应用程序生命周期概述

以下是ASP.NET 4.0的请求pipe道中的事件(粗体)和其他步骤:

  1. validation请求,该请求检查浏览器发送的信息,并确定它是否包含潜在的恶意标记。
  2. 如果在Web.config文件的UrlMappingsSection部分中configuration了任何URL,请执行URL映射。
  3. 引发BeginRequest事件。
  4. 引发AuthenticateRequest事件。
  5. 提高PostAuthenticateRequest事件。
  6. 引发AuthorizeRequest事件。
  7. 引发PostAuthorizeRequest事件。
  8. 引发ResolveRequestCache事件。
  9. 提高PostResolveRequestCache事件。
  10. [IIS 5.0 / 6.0]根据请求资源的文件扩展名(映射到应用程序的configuration文件中),select一个实现IHttpHandler的类来处理请求。 如果请求是从Page类派生的对象(页面),并且页面需要被编译,ASP.NET在创build它的一个实例之前编译页面。 [IIS 7.0] 引发MapRequestHandler事件。 根据请求资源的文件扩展名select适当的处理程序。 处理程序可以是本机代码模块,如IIS 7.0 StaticFileModule或托pipe代码模块,如PageHandlerFactory类(处理.aspx文件)。
  11. 引发PostMapRequestHandler事件。
  12. 引发AcquireRequestState事件。
  13. 引发PostAcquireRequestState事件。
  14. 引发PreRequestHandlerExecute事件。
  15. 为请求调用适当的IHttpHandler类的ProcessRequest方法(或asynchronous版本IHttpAsyncHandler.BeginProcessRequest)。 例如,如果请求是针对页面的,则当前页面实例处理该请求。
  16. 引发PostRequestHandlerExecute事件。
  17. 引发ReleaseRequestState事件。
  18. 提高PostReleaseRequestState事件。
  19. 如果定义了Filter属性,请执行响应筛选。
  20. 引发UpdateRequestCache事件。
  21. 引发PostUpdateRequestCache事件。
  22. [IIS 7.0] 引发LogRequest事件。
  23. [IIS 7.0] 引发PostLogRequest事件。
  24. 引发EndRequest事件。
  25. 引发PreSendRequestHeaders事件。
  26. 引发PreSendRequestContent事件。

注意:仅当应用程序在IIS 7.0和.NET Framework 3.0或更高版本中以集成模式运行时,才支持MapRequestHandler,LogRequest和PostLogRequest事件。

的BeginRequest

请求已经开始。 如果您在请求开始时需要做某些事情(例如,在每个页面顶部显示广告横幅或者一些variables初始化)。

AuthenticateRequest

如果要插入自己的自定义身份validationscheme(例如,根据数据库查找用户以validation密码或检查HTTP请求中的标头信息)。

的AuthorizeRequest

此事件在内部用于实施授权机制(例如,将访问控制列表(ACL)存储在数据库中而不是文件系统中)。

ResolveRequestCache

此事件确定是否可以从输出caching提供页面。 如果要编写自己的caching模块(例如,构build基于文件的caching而不是内存caching),请同步此事件以确定是从caching中提供页面还是生成新页面。

的AcquireRequestState

会话状态是从状态存储中检索的。 如果你想构build你自己的状态pipe理模块,那么请同步这个事件来从状态存储中获取会话状态。

的PreRequestHandlerExecute

这个事件发生在HTTP处理程序执行之前。

PostRequestHandlerExecute

这个事件发生在执行HTTP处理程序之后。

ReleaseRequestState

会话状态存储在状态存储器中。 如果您正在构build自定义会话状态模块,则必须将状态存储回状态存储区。

的UpdateRequestCache

此事件将输出写回输出caching。

EndRequest

请求已经完成。

要在httpmodule的PreSendRequestContent事件中调用caching方法。 问题是,根据客户需求在我的应用程序中添加了Web页眉和页脚,我无法caching该内容图像,JavaScript和CSS。 目前我正在使用httpmodule的ReleaseRequestState方法。