HTTP请求上下文(二)

      在HTTP请求上下文(一)中列举了HttpApplication类的事件,这些事件引发的先后顺序如下:
      BeginRequest  ASP.NET HTTP管道开始处理请求,改事件会在Application_Start之后引发(第一次时).

       AuthenticateRequest  即将对发出请求的用户进行身份验证。ASP.NET内部所有身份验证的模块都订阅此事件,并试图生成用户标识,如果没有能够生成验证用户的标识的身份验证模块,则会调用内部默认的身份验证模块,为这个验证用户生成一个标识。由于存在一致性,因此不会出现null标识的情况。
       Post AuthenticateRequest  发出请求用户的身份已被验证,所有信息会存在HttpContext的User属性中
      
AuthorizeRequest  即将请求授权。该事件一般有应用程序处理,基于业务逻辑或应用程序需求来进行自定义的授权过程
      
Post AuthorizeRequest 请求已被授权。
       ResolveRequestCache  ASP.NET检查请求的页面是否存在正确的缓存,如果有直接调用缓存内容,进入EndRequest事件。
       Post ResolveRequestCache  请求的内容没有相关的有效缓存,请求的流程继续向下。此时与请求URL对应的HTTP处理程序被创建,如果请求的是.aspx页面,则创建该页面的实例。
       PostMapRequestHandler  该事件在成功创建与请求URL对应的HTTP处理程序时引发。
      
AcquireRequestState  订阅该事件的模块要获取请求的状态信息,这里需要很多必要的条件:处理程序必须以某种形式支持会话状态,且必须存在有效的会话id。  
      
PostAcquireRequestState  状态信息(如Application、Session)已经获得。
       PreRequestHandlerExecute 该事件恰好在处理请求的程序执行前引发。该处理程序会执行自身逻辑,并为客户端生成输出。

       PostRequestHandlerExecute  该事件在处理程序生成响应文本后引发。
       ReleaseRequestState  该事件会在处理程序释放状态信息并准备关闭时引发。会话状态模块会在改事件引发时更新失效的会话状态。

       Post ReleaseRequestState  会话状态被保存。所有的相关响应筛选工作此时已结束。
       UpdateRequestCache   ASP.NET决定是否缓存生成的输出(此时还会由注册的模块进行筛选),以便下次同类请求的响应更为快速。
       PostUpdateRequestCache  页面已被保存到输出缓存中(如果缓存项已经配置)
       EndRequest  该事件是HTTP管道的最后一步。控制权会交给HttpRuntime对象,该对象负责将响应发送给客户端。此时,输出文本尚未被发送。
        还有一对事件会在请求期间被引发,但时机并不确定。这两个事件为PreSendRequestHeaders和PreSendRequestContentPreSendRequestHeaders用于通知负责当前请求的HttpApplication对象将Http标头发送给客户端。该事件一般会在EndRequest之后引发,但如果缓存功能被关闭,该事件会在某些内容即将发送给客户端时引发。最后,通过PreSendRequestContent事件,负责当前请求的HttpApplication对象会得知响应的主题内容即将被发送。还有一个不确定的应用程序事件Error。

         

 

       
posted @ 2009-09-05 13:18  坐看风起  阅读(519)  评论(0编辑  收藏  举报