HTTPModule事件执行顺序?
有没有人知道一个网站或页面,或知道HTTPApplication类的HTTPModule事件执行事件的执行顺序?
我发现所有事件的MSDN文档 ,但没有显示过程步骤的列表,我一直没能find一个。
也许这有帮助
http://support.microsoft.com/kb/307985/en-us/
HttpApplication类提供了许多模块可以同步的事件。 以下事件可用于模块在每个请求上进行同步。 这些事件按顺序列出:
- 的BeginRequest
- AuthenticateRequest
- 的AuthorizeRequest
- ResolveRequestCache
- 的AcquireRequestState
- 的PreRequestHandlerExecute
- PostRequestHandlerExecute
- ReleaseRequestState
- 的UpdateRequestCache
- EndRequest
以下事件可供模块与每个请求传输进行同步。 这些事件的顺序是非确定性的。
- PreSendRequestHeaders
- PreSendRequestContent
- 错误
请参阅文章的完整信息。
MSDN Library文档:
- IIS 5.0和6.0的ASP.NET应用程序生命周期概述
- IIS 7.0的ASP.NET应用程序生命周期概述
以下是ASP.NET 4.0的请求pipe道中的事件(粗体)和其他步骤:
- validation请求,该请求检查浏览器发送的信息,并确定它是否包含潜在的恶意标记。
- 如果在Web.config文件的UrlMappingsSection部分中configuration了任何URL,请执行URL映射。
- 引发BeginRequest事件。
- 引发AuthenticateRequest事件。
- 提高PostAuthenticateRequest事件。
- 引发AuthorizeRequest事件。
- 引发PostAuthorizeRequest事件。
- 引发ResolveRequestCache事件。
- 提高PostResolveRequestCache事件。
- [IIS 5.0 / 6.0]根据请求资源的文件扩展名(映射到应用程序的configuration文件中),select一个实现IHttpHandler的类来处理请求。 如果请求是从Page类派生的对象(页面),并且页面需要被编译,ASP.NET在创build它的一个实例之前编译页面。 [IIS 7.0] 引发MapRequestHandler事件。 根据请求资源的文件扩展名select适当的处理程序。 处理程序可以是本机代码模块,如IIS 7.0 StaticFileModule或托pipe代码模块,如PageHandlerFactory类(处理.aspx文件)。
- 引发PostMapRequestHandler事件。
- 引发AcquireRequestState事件。
- 引发PostAcquireRequestState事件。
- 引发PreRequestHandlerExecute事件。
- 为请求调用适当的IHttpHandler类的ProcessRequest方法(或asynchronous版本IHttpAsyncHandler.BeginProcessRequest)。 例如,如果请求是针对页面的,则当前页面实例处理该请求。
- 引发PostRequestHandlerExecute事件。
- 引发ReleaseRequestState事件。
- 提高PostReleaseRequestState事件。
- 如果定义了Filter属性,请执行响应筛选。
- 引发UpdateRequestCache事件。
- 引发PostUpdateRequestCache事件。
- [IIS 7.0] 引发LogRequest事件。
- [IIS 7.0] 引发PostLogRequest事件。
- 引发EndRequest事件。
- 引发PreSendRequestHeaders事件。
- 引发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方法。