ASP.NET页面揭秘(二)

   这里主要谈谈Application类中的事件

由前一篇文章可以知道,一旦出现了HttpContext类的一个实例,HttpRuntime类就会建立一个ASP.NET应用程序对象来完成该请求。一个应用程序包括HttpApplication类的一个实例。HttpApplication是一个global.asax派生的对象,处理所有被传递给某个虚文件夹得Http请求。一个正在运行的ASP.NET运行程序完全由它的虚拟文件来表示,并选择性地global.asax文件来表示。虚拟文件夹名称是一种键,Http运行库用它来选择表示哪一个正在运行的应用程序应当负责输入请求。Global.asax包含一些设置和代码,用于响应ASP.NET引发的或者影响该应用程序的HTTP模块注册的应用程序级事件。只有完成请求以后才能重用HttpApplication的实例。如果没有HttpApplication对象可以使用,则创建一个新的HttpApplication对象,并把它放入到对象池中。

 

HttpApplication类的事件

HttpApplication_Start在Web应用程序的生命周期内只激发一次。它表示已经创建HttpApplication类的第一个实例,以启动服务它的第一个请求。Application_End只在应用程序被关闭时才被调用。

HttpApplication有许多事件,以下是按照事件先后激发顺序。

1.  对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。

2.  如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射

3.  BeginRequest ASP.NET HTTP管道开始处理该请求。该事件在Application_Start之后到达应用程序。

4.  AuthenticateRequest 正在验证请求。所有的内部ASP.NET验证模块都订阅该事件,并企图产生一个标识。如果没有一个验证模块产生一个已验证用户,则调用一个默认的内部验证模块,为这个未验证的用户产生一个标识。这么做是为了一致性,使该代码不必考虑null值。

5.  PostAuthenticateRequest请求已被验证。所有可能的信息存储在HttpContext的User属性中。

6.  AuthorizeRequest 即将发生请求授权。该事件通常被应用程序的代码进程处理,以根据业务逻辑或其它应用程序需求完成定制的授权。

7.  PostAuthorizeRequest该请求已被授权

8.  ResolveRequestCache ASP.NET运行库验证返回一个以前缓存的页面能否解决该请求。如果找到一个有效地缓存标识,则从该缓存中服务该请求,并缩短该请求的处理过程,只调用任何已注册的EndRequest处理程序。

9.  PostResolveRequestCache 请求不能从缓存中得到服务,继续下面的处理过程。这时创建一个对应被请求的URL的Http处理程序。如果被请求的是一个.aspx页面,则创建一个页面类型的实例。

10.  根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。

11.  PostMapRequestHandler 成功创建对应被请求URL的Http处理程序时,该事件触发。

12.  AcquireRequestState 连接该事件的模块愿意获取该请求的任何状态信息。

13.  PostAcquireRequestState 已经获取状态信息(如Application或session)

14.  PreRequestHandlerExecute在执行一个给定请求的处理程序之前立即爆发。处理程序完成它的工作,并为客户端输出。

15.  为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。

16.  PostRequestHandlerExecute当该处理程序产生响应文本时激发这一事件。

17.  ReleaseRequestState 当处理程序释放状态信息并准备关闭时激发该事件。

18.  PostReleaseRequestState 已经持久地保存了状态(页面执行时被修改过)。这时完成任何有关的响应筛选。

19. 如果定义了 Filter 属性,则执行响应筛选。获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。

20. UpdateRequestCache ASP.NET运行库决定是否应当缓存产生的输出(现在也已经被已注册模块正常筛选过),以便供将来相同请求重用。

21. PostUpdateRequestCache 页面已被保存到输出缓存中

22. EndRequest 该事件作为Http管道的最后一步激发。控制传回到HttpRuntime对象,由它负责将响应真正地转发给客户端。

 

posted @ 2010-04-22 12:12  胡佳180815  阅读(2500)  评论(7编辑  收藏  举报