HttpApplication 类

HttpApplication
定义 ASP.NET 应用程序中的所有应用程序对象通用的方法、属性和事件。此类是用户在 global.asax 文件中所定义的应用程序的基类。

HttpApplication 类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。

HttpApplication 类的一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。

 

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

 

1.BeginRequest

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

BeginRequest 事件发出信号表示创建任何给定的新请求。此事件始终被引发,并且始终是请求处理期间发生的第一个事件。

2.AuthenticateRequest

当安全模块已建立用户标识时发生。

AuthenticateRequest 事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。预订 AuthenticateRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证。

3.PostAuthenticateRequest

当安全模块已建立用户标识时发生。

PostAuthenticateRequest 事件在 AuthenticateRequest 事件发生之后引发。预订 PostAuthenticateRequest 事件的功能可以访问由 PostAuthenticateRequest 处理的任何数据。

4.AuthorizeRequest

当安全模块已验证用户授权时发生。

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

5.PostAuthorizeRequest

在当前请求的用户已获授权时发生。

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

6.ResolveRequestCache

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

7.PostResolveRequestCache

ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。

PostResolveRequestCache 事件之后、PostMapRequestHandler 事件之前创建一个事件处理程序(对应于请求 URL 的页)。

8.PostMapRequestHandler

 

9.AcquireRequestState

ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。

AcquireRequestState 事件在创建了事件处理程序之后引发。

10.PostAcquireRequestState

在已获得与当前请求关联的请求状态(例如会话状态)时发生。

PostAcquireRequestState 事件在 AcquireRequestState 事件发生之后引发。预订 AcquireRequestState 事件的功能可以访问由 PostAcquireRequestState 处理的任何数据。

11.PreRequestHandlerExecute

恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web service)前发生。

执行事件处理程序。

12.PostRequestHandlerExecute

ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。

13.ReleaseRequestState

ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。

引发 ReleaseRequestState 事件以后,应用程序以该请求结束,并发出 ASP.NET 信号以存储该请求状态。

14.PostReleaseRequestState

ASP.NET 已完成所有请求事件处理程序的执行并且请求状态数据已存储时发生。

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

15.UpdateRequestCache

ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。

16.PostUpdateRequestCache

ASP.NET 完成了缓存模块的更新并存储了以下响应时发生,这些响应用于满足来自缓存的后续请求。

PostUpdateRequestCache 事件在 UpdateRequestCache 事件发生之后引发。引发 PostUpdateRequestCache 以后,ASP.NET 已完成代码处理并且缓存的内容已结束。

17.EndRequest

ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。

 

 

下面的两个示例演示如何使用 HttpApplication 类及其事件。第一个代码示例演示如何创建自定义 HTTP 模块以及如何将事件连接到该模块。第二代码示例演示如何修改 Web.config 文件。

下面的代码示例演示如何创建自定义 HTTP 模块并将 AcquireRequestState 事件连接到 HTTP 模块。HTTP 模块将截获对 Web 应用程序资源的所有请求,从而使您可以筛选客户端请求。预订 HttpApplication 事件的任何 HTTP 模块都必须实现 IHttpModule 接口。

 

using System;
using System.Web;

namespace Samples.AspNet.CS
{
    public class CustomHTTPModule : IHttpModule
    {
        public CustomHTTPModule()
        {
            // Class constructor.
        }

        // Classes that inherit IHttpModule
        // must implement the Init and Dispose methods.
        public void Init(HttpApplication app)
        {

            app.AcquireRequestState += new EventHandler(app_AcquireRequestState);
   app.PostAcquireRequestState += new EventHandler(app_PostAcquireRequestState);
  }

        public void Dispose()
        {
            // Add code to clean up the
            // instance variables of a module.
        }

        // Define a custom AcquireRequestState event handler.
        public void app_AcquireRequestState(object o, EventArgs ea)
        {
            HttpApplication httpApp = (HttpApplication)o;
            HttpContext ctx = HttpContext.Current;
            ctx.Response.Write(" Executing AcquireRequestState ");
        }

        // Define a custom PostAcquireRequestState event handler.
  public void app_PostAcquireRequestState(object o, EventArgs ea)
  {
   HttpApplication httpApp = (HttpApplication)o;
   HttpContext ctx = HttpContext.Current;
   ctx.Response.Write(" Executing PostAcquireRequestState ");
  }

 }
}

在自定义 HTTP 模块中的事件可以发生之前,您必须先修改 Web.config 文件中的配置设置,通知 ASP.NET 有关该 HTTP 模块的信息。下面的代码示例演示 Web.config 文件的 httpModules 节中的相应配置设置。

<configuration>
  <system.web>
    <httpModules>
      <add type="Samples.AspNet.CS.CustomHTTPModule"
           name="CustomHttpModule" />
      </httpModules>
  </system.web>
</configuration>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值