2009年7月1日

Global.asax.cs中的方法的含义

跟 Request 有关的放到后面一起说,先说其他的 5 个。

Application_Init :在每一个 HttpApplication 实例初始化的时候执行。

Application_Disposed :在每一个 HttpApplication 实例被销毁之前执行。

Application_Error :所有没有处理的错误都会导致这个方法的执行。

Application_Start :在程序初始化的时候执行。在 Web 应用程序的生命周期里就执行一次(自动的重新启动算另外一次生命周期),这里只能放一些公用的信息,比如 HttpApplicationState 。

Application_End :应用程序结束时,在最后一个 HttpApplication 销毁之后执行。对应 Application_Start ,在整个生命周期里面也是只执行一次。

下面来看看跟 Request 有关的,首先我们来看看相应的事件执行顺序:

1.       BeginRequest

2.       AuthenticateRequest

3.       AuthorizeRequest

4.       ResolveRequestCache

5.       AcquireRequestState

6.       PreRequestHandlerExecute

7.       PostRequestHandlerExecute

8.       ReleaseRequestState

9.       UpdateRequestCache

10.   EndRequest

另外还有两个:

1.       PreSendRequestHeaders

2.       PreSendRequestContent

这两个事件的顺序是无法确定的,按照 MSDN 的说法,它们随时都可能发生。下面就按这个顺序来解释一下它们在 Global.asax.cs 中相应的事件处理方法的含义。

Application_BeginRequest : BeginRequest 是在收到 Request 时第一个触发的事件,这个方法自然就是第一个执行的了。

Application_AuthenticateRequest :当安全模块已经建立了当前用户的标识后执行。

Application_AuthorizeRequest :当安全模块已经验证了当前用户的授权时执行。

Application_ResolveRequestCache :当 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序( 页面或者是 WebService )的执行。这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从 Cache 中得到的。

Application_AcquireRequestState :当 ASP.NET 获取当前请求所关联的当前状态(如 Session )时执行(真是拗口啊, msdn 上就这样写的,我自己想不出什么好句子了)。

Application_PreRequestHandlerExecute :当 ASP.Net 即将把请求发送到处理程序对象(页面或者是 WebService )之前执行。这个时候, Session 就可以用了。

Application_PostRequestHandlerExecute : 当处理程序对象(页面或者是 WebService )工作完成之后执行。

Application_ReleaseRequestState :在 ASP.NET 执行完所有请求处理程序后执行。 ReleaseRequestState 事件将使当前状态数据被保存。

Application_UpdateRequestCache :在 ASP.NET 执行完处理程序后,为了后续的请求而更新响应缓存时执行。

Application_EndRequest :同上, EndRequest 是在响应 Request 时最后一个触发的事件,这个方法自然就是最后一个执行的了。

再说这两个无顺序的

Application_PreSendRequestHeaders :向客户端发送 Http 标头之前执行。

Application_PreSendRequestContent :向客户端发送 Http 正文之前执行。

 

最后就是两个关于 Session 的,这就简单咯

Session_Start :会话开始时执行。

Session_End :会话结束或过期时执行。

其实 Global.asax.cs 中不只可以放这些,其他的实现了 IHttpModule 接口的类所暴露出来的事件都可以使用这样的方式放到这里来。前提是在 Global.asax (或 Web.Config )中有相应的声明。另外, Global.asax 中还可以有很多的花样,但是我没有整理,其实也很简单(更主要的是很多时候不咋用得上), MSDN 里面有详细的介绍,大家可以查一下,我觉得最有用的就数那个 object 标记了, ^_^

posted @ 2009-07-01 16:55 遥望星空 阅读(74) 评论(0) 编辑

HttpApplication事件执行顺序

HttpApplication 类的实例(Global继承自该类)是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。HttpApplication 类的一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。

       应用程序按照以下顺序执行由 global.asax 文件中定义的模块或用户代码处理的事件:

BeginRequest(在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生)

AuthenticateRequest (当安全模块已建立用户标识时发生。注:AuthenticateRequest 事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。预订 AuthenticateRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证。)

PostAuthenticateRequest (注意:该事件在 .NET Framework 2.0 版中是新增的。 当安全模块已建立用户标识时发生。PostAuthenticateRequest 事件在 AuthenticateRequest 事件发生之后引发。预订 PostAuthenticateRequest 事件的功能可以访问由 PostAuthenticateRequest 处理的任何数据。)

AuthorizeRequest (当安全模块已验证用户授权时发生。AuthorizeRequest 事件发出信号表示 ASP.NET 已对当前请求进行了授权。预订 AuthorizeRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证和授权。)

PostAuthorizeRequest (.NET 2.0里新增的事件。在当前请求的用户已获授权时发生。PostAuthorizeRequest 事件发出信号表示 ASP.NET 已对当前请求进行了授权。预订PostAuthorizeRequest 事件可确保在处理附加的模块或处理程序之前对请求进行身份验证和授权。)

ResolveRequestCache (当 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过事件处理程序(例如某个页或 XML Web services)的执行。)

PostResolveRequestCache (在 ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。)在 PostResolveRequestCache 事件之后、PostMapRequestHandler 事件之前创建一个事件处理程序(对应于请求 URL 的页)。

PostMapRequestHandler

AcquireRequestState

PostAcquireRequestState

PreRequestHandlerExecute(执行事件处理程序。)

PostRequestHandlerExecute

ReleaseRequestState

PostReleaseRequestState (在PostReleaseRequestState 事件之后,响应筛选器(如果有)将对输出进行筛选。)

UpdateRequestCache

PostUpdateRequestCache

EndRequest

 

posted @ 2009-07-01 16:44 遥望星空 阅读(119) 评论(0) 编辑

导航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

公告

昵称:遥望星空
园龄:4年1个月
粉丝:9
关注:2

搜索

 
 

常用链接

最新随笔

我的标签

随笔分类(280)

随笔档案(292)

技术联盟

积分与排名

  • 积分 - 64437
  • 排名 - 1650

最新评论

阅读排行榜

评论排行榜

推荐排行榜