HttpApplication对象是经由HttpApplicationFactory.GetApplicationInstance创建的.
创建HttpApplication实例之后就是调用实例的InitInternal方法。
InitInternal方法的主要功能如下:
1. InitModules():根据Web.Config的设置,创建相应的HttpModules。
2. HookupEventHandlersForAppplicationAndModules:根据发生的事件,调用HttpApplication实例中相应的事件处理函数。
3.创建很多实现IExecutionStep接口的类的实例并添加到当前HttpApplication实例的_execSteps中,等待回调时执行.
_execStep中主要的处理工作如下:
1) 对请求的路径进行安全检查,禁止非法路径访问(ValidatePathExecutionStep)。
2) 如果设置了UrlMappings, 进行RewritePath(UrlMappingsExecutionStep)。
3) 执行事件处理函数,比如:BeginRequest、AuthenticateRequest等等。
创建相应的HttpModules后所执行的事件:
在ASP.NET响应请求时作为 HTTP 执行管线链中的第一个事件发生
1.BeginRequest
当安全模块建立用户标识时发生
2.AuthenticateRequest
当安全模块已建立用户标识时发生
3.PostAuthenticateRequest
当安全模块验证用户授权时发生
4.AuthorizeRequest
在当前请求的用户已获授权时发
5.PostAuthorizeRequest
在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生
6.ResolveRequestCache
在 ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。
7.PostResolveRequestCache
在 ASP.NET 已将当前请求映射到相应的事件处理程序时发生。
*建立一个HttpHandler的入口实例*
8.PostMapRequestHandler
当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。
9.AcquireRequestState
在已获得与当前请求关联的请求状态(例如会话状态)时发生。
10.PostAcquireRequestState
恰好在 ASP.NET 开始执行事件处理程序
11.PreRequestHandlerExecute
在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。
HttpModule窗口就会将控制权暂时交给HttpHandler容器
HttpHandler.ProcessRequest()
HttpHandler生命周期结束,Session失效
12.PostRequestHandlerExecute
在 ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。
13.ReleaseRequestState
在 ASP.NET 已完成所有请求事件处理程序的执行并且请求状态数据已存储时发生。
14.PostReleaseRequestState
当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。
15.UpdateRequestCache
在 ASP.NET 完成缓存模块的更新并存储了用于从缓存中为后续请求提供服务的响应后,发生此事件。
16.PostUpdateRequestCache
恰好在 ASP.NET 为当前请求执行任何记录之前发生。
17.LogRequest. (IIS7)
在 ASP.NET 处理完 LogRequest 事件的所有事件处理程序后发生
18.PostLogRequest(IIS7)
在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。 。
18.EndRequest
19.PreSendRequestHeaders
20.PreSendRequestContent