HttpApplication 类

定义

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

public ref class HttpApplication : IDisposable, System::ComponentModel::IComponent, System::Web::IHttpAsyncHandler
public class HttpApplication : IDisposable, System.ComponentModel.IComponent, System.Web.IHttpAsyncHandler
type HttpApplication = class
    interface IHttpAsyncHandler
    interface IHttpHandler
    interface IComponent
    interface IDisposable
type HttpApplication = class
    interface IComponent
    interface IDisposable
    interface IHttpAsyncHandler
    interface IHttpHandler
Public Class HttpApplication
Implements IComponent, IDisposable, IHttpAsyncHandler
继承
HttpApplication
实现

示例

以下两个示例演示如何使用 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 ");
        }
    }
}
Imports System.Web

Namespace Samples.AspNet.VB
    Public Class CustomHTTPModule
        Implements IHttpModule

        Public Sub New()

            ' Class constructor.

        End Sub


        ' Classes that inherit IHttpModule 
        ' must implement the Init and Dispose methods.
        Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init

            AddHandler app.AcquireRequestState, AddressOf app_AcquireRequestState
            AddHandler app.PostAcquireRequestState, AddressOf app_PostAcquireRequestState

        End Sub


        Public Sub Dispose() Implements IHttpModule.Dispose

            ' Add code to clean up the
            ' instance variables of a module.

        End Sub


        ' Define a custom AcquireRequestState event handler.
        Public Sub app_AcquireRequestState(ByVal o As Object, ByVal ea As EventArgs)

            Dim httpApp As HttpApplication = CType(o, HttpApplication)
            Dim ctx As HttpContext = HttpContext.Current
            ctx.Response.Write(" Executing AcquireRequestState ")

        End Sub

        ' Define a custom PostAcquireRequestState event handler.
        Public Sub app_PostAcquireRequestState(ByVal o As Object, ByVal ea As EventArgs)

            Dim httpApp As HttpApplication = CType(o, HttpApplication)
            Dim ctx As HttpContext = HttpContext.Current
            ctx.Response.Write(" Executing PostAcquireRequestState ")

        End Sub

    End Class

End Namespace

在自定义 HTTP 模块中发生事件之前,必须修改 Web.config 文件中的配置设置,以通知 ASP.NET 有关 HTTP 模块的信息。 以下示例显示了 Web.config 文件中的相应配置设置 httpModules 。 以下设置适用于 IIS 7.0 经典模式和早期版本的 IIS。

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

以下设置适用于 IIS 7.0 集成模式。

<configuration>
  <system.webServer>
    <modules>
      <add type="Samples.AspNet.CS.CustomHTTPModule"
        name="CustomHttpModule" />
      </modules>
  </system.webServer>
</configuration>
<configuration>
  <system.webServer>
    <modules>
      <add type="Samples.AspNet.VB.CustomHTTPModule"
        name="CustomHttpModule" />
      <modules>
  </system.webServer>
</configuration>

注解

HttpApplication 类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。 类 HttpApplication 的一个实例用于在其生存期内处理许多请求。 但是,它一次只能处理一个请求。 因此,成员变量可用于存储每个请求的数据。

应用程序引发可由实现 IHttpModule 接口的自定义模块或 Global.asax 文件中定义的事件处理程序代码处理的事件。 实现接口的 IHttpModule 自定义模块可以放在 App_Code 文件夹中或 Bin 文件夹中的 DLL 中。

.NET Framework 版本 3.5 中引入了 HttpApplication。 有关详细信息,请参阅 版本和依赖项

注释

在集成模式下运行 IIS 7.0 时,App_Code文件夹或 Bin 文件夹中的自定义模块将应用于请求管道中的所有请求。 Global.asax 文件中的事件处理程序代码仅适用于映射到 ASP.NET 处理程序的请求。

应用程序事件按以下顺序引发:

  1. BeginRequest

  2. AuthenticateRequest

  3. PostAuthenticateRequest

  4. AuthorizeRequest

  5. PostAuthorizeRequest

  6. ResolveRequestCache

  7. PostResolveRequestCache

    PostResolveRequestCache 事件之后和事件之前 PostMapRequestHandler ,将创建一个事件处理程序(即对应于请求 URL 的页面)。 当服务器在集成模式下运行 IIS 7.0 并且至少.NET框架版本 3.0 时,将引发 MapRequestHandler 事件。 当服务器在经典模式或早期版本的 IIS 中运行 IIS 7.0 时,无法处理此事件。

  8. PostMapRequestHandler

  9. AcquireRequestState

  10. PostAcquireRequestState

  11. PreRequestHandlerExecute

    执行事件处理程序。

  12. PostRequestHandlerExecute

  13. ReleaseRequestState

  14. PostReleaseRequestState

    PostReleaseRequestState引发事件后,任何现有响应筛选器都将筛选输出。

  15. UpdateRequestCache

  16. PostUpdateRequestCache

  17. LogRequest

    IIS 7.0 集成模式和至少 .NET Framework 3.0 支持此事件

  18. PostLogRequest

    此事件支持 IIS 7.0 集成模式和至少 .NET Framework 3.0

  19. EndRequest

构造函数

名称 说明
HttpApplication()

初始化 HttpApplication 类的新实例。

属性

名称 说明
Application

获取应用程序的当前状态。

Context

获取有关当前请求的特定于 HTTP 的信息。

Events

获取处理所有应用程序事件的事件处理程序委托的列表。

Modules

获取当前应用程序的模块集合。

Request

获取当前请求的内部请求对象。

Response

获取当前请求的内部响应对象。

Server

获取当前请求的内部服务器对象。

Session

获取提供会话数据访问权限的内部会话对象。

Site

获取或设置实现的 IComponent 站点接口。

User

获取当前请求的内部用户对象。

方法

名称 说明
AddOnAcquireRequestStateAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 AcquireRequestState 事件添加到当前请求的异步 AcquireRequestState 事件处理程序集合中。

AddOnAcquireRequestStateAsync(BeginEventHandler, EndEventHandler)

将指定的 AcquireRequestState 事件添加到当前请求的异步 AcquireRequestState 事件处理程序集合中。

AddOnAuthenticateRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 AuthenticateRequest 事件添加到当前请求的异步 AuthenticateRequest 事件处理程序集合中。

AddOnAuthenticateRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 AuthenticateRequest 事件添加到当前请求的异步 AuthenticateRequest 事件处理程序集合中。

AddOnAuthorizeRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 AuthorizeRequest 事件添加到当前请求的异步 AuthorizeRequest 事件处理程序集合中。

AddOnAuthorizeRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 AuthorizeRequest 事件添加到当前请求的异步 AuthorizeRequest 事件处理程序集合中。

AddOnBeginRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 BeginRequest 事件添加到当前请求的异步 BeginRequest 事件处理程序集合中。

AddOnBeginRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 BeginRequest 事件添加到当前请求的异步 BeginRequest 事件处理程序集合中。

AddOnEndRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 EndRequest 事件添加到当前请求的异步 EndRequest 事件处理程序集合中。

AddOnEndRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 EndRequest 事件添加到当前请求的异步 EndRequest 事件处理程序集合中。

AddOnLogRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 LogRequest 事件添加到当前请求的异步 LogRequest 事件处理程序集合中。

AddOnLogRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 LogRequest 事件添加到当前请求的异步 LogRequest 事件处理程序集合中。

AddOnMapRequestHandlerAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 MapRequestHandler 事件添加到当前请求的异步 MapRequestHandler 事件处理程序集合中。

AddOnMapRequestHandlerAsync(BeginEventHandler, EndEventHandler)

将指定的 MapRequestHandler 事件添加到当前请求的异步 MapRequestHandler 事件处理程序集合中。

AddOnPostAcquireRequestStateAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostAcquireRequestState 事件添加到当前请求的异步 PostAcquireRequestState 事件处理程序集合中。

AddOnPostAcquireRequestStateAsync(BeginEventHandler, EndEventHandler)

将指定的 PostAcquireRequestState 事件添加到当前请求的异步 PostAcquireRequestState 事件处理程序集合中。

AddOnPostAuthenticateRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostAuthorizeRequest 事件添加到当前请求的异步 PostAuthorizeRequest 事件处理程序集合中。

AddOnPostAuthenticateRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 PostAuthenticateRequest 事件添加到当前请求的异步 PostAuthenticateRequest 事件处理程序集合中。

AddOnPostAuthorizeRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostAuthorizeRequest 指定添加到当前请求的异步 PostAuthorizeRequest 事件处理程序集合中。

AddOnPostAuthorizeRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 PostAuthorizeRequest 事件添加到当前请求的异步 PostAuthorizeRequest 事件处理程序集合中。

AddOnPostLogRequestAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostLogRequest 事件添加到当前请求的异步 PostLogRequest 事件处理程序集合中。

AddOnPostLogRequestAsync(BeginEventHandler, EndEventHandler)

将指定的 PostLogRequest 事件添加到当前请求的异步 PostLogRequest 事件处理程序集合中。

AddOnPostMapRequestHandlerAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostMapRequestHandler 事件添加到当前请求的异步 PostMapRequestHandler 事件处理程序集合中。

AddOnPostMapRequestHandlerAsync(BeginEventHandler, EndEventHandler)

将指定的 PostMapRequestHandler 事件添加到当前请求的异步 PostMapRequestHandler 事件处理程序集合中。

AddOnPostReleaseRequestStateAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostReleaseRequestState 事件添加到当前请求的异步 PostReleaseRequestState 事件处理程序集合中。

AddOnPostReleaseRequestStateAsync(BeginEventHandler, EndEventHandler)

将指定的 PostReleaseRequestState 事件添加到当前请求的异步 PostReleaseRequestState 事件处理程序集合中。

AddOnPostRequestHandlerExecuteAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostRequestHandlerExecute 事件添加到当前请求的异步 PostRequestHandlerExecute 事件处理程序集合中。

AddOnPostRequestHandlerExecuteAsync(BeginEventHandler, EndEventHandler)

将指定的 PostRequestHandlerExecute 事件添加到当前请求的异步 PostRequestHandlerExecute 事件处理程序集合中。

AddOnPostResolveRequestCacheAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostResolveRequestCache 事件添加到当前请求的异步 PostResolveRequestCache 事件处理程序集合中。

AddOnPostResolveRequestCacheAsync(BeginEventHandler, EndEventHandler)

将指定的 PostResolveRequestCache 事件添加到当前请求的异步 PostResolveRequestCache 事件处理程序集合中。

AddOnPostUpdateRequestCacheAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PostUpdateRequestCache 事件添加到当前请求的异步 PostUpdateRequestCache 事件处理程序集合中。

AddOnPostUpdateRequestCacheAsync(BeginEventHandler, EndEventHandler)

将指定的 PostUpdateRequestCache 事件添加到当前请求的异步 PostUpdateRequestCache 事件处理程序集合中。

AddOnPreRequestHandlerExecuteAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 PreRequestHandlerExecute 事件添加到当前请求的异步 PreRequestHandlerExecute 事件处理程序集合中。

AddOnPreRequestHandlerExecuteAsync(BeginEventHandler, EndEventHandler)

将指定的 PreRequestHandlerExecute 事件添加到当前请求的异步 PreRequestHandlerExecute 事件处理程序集合中。

AddOnReleaseRequestStateAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 ReleaseRequestState 事件添加到当前请求的异步 ReleaseRequestState 事件处理程序集合中。

AddOnReleaseRequestStateAsync(BeginEventHandler, EndEventHandler)

将指定的 ReleaseRequestState 事件添加到当前请求的异步 ReleaseRequestState 事件处理程序集合中。

AddOnResolveRequestCacheAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 ResolveRequestCache 事件处理程序添加到当前请求的异步 ResolveRequestCache 事件处理程序集合中。

AddOnResolveRequestCacheAsync(BeginEventHandler, EndEventHandler)

将指定的 ResolveRequestCache 事件处理程序添加到当前请求的异步 ResolveRequestCache 事件处理程序集合中。

AddOnUpdateRequestCacheAsync(BeginEventHandler, EndEventHandler, Object)

将指定的 UpdateRequestCache 事件添加到当前请求的异步 UpdateRequestCache 事件处理程序集合中。

AddOnUpdateRequestCacheAsync(BeginEventHandler, EndEventHandler)

将指定的 UpdateRequestCache 事件添加到当前请求的异步 UpdateRequestCache 事件处理程序集合中。

CompleteRequest()

导致 ASP.NET 绕过 HTTP 管道链中执行的所有事件和筛选,并直接执行 EndRequest 事件。

Dispose()

HttpApplication释放实例。

Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
GetHashCode()

用作默认哈希函数。

(继承自 Object)
GetOutputCacheProviderName(HttpContext)

获取为网站配置的默认输出缓存提供程序的名称。

GetType()

获取当前实例的 Type

(继承自 Object)
GetVaryByCustomString(HttpContext, String)

提供该属性的应用程序范围的实现 VaryByCustom

Init()

添加所有事件处理程序模块后,执行自定义初始化代码。

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
OnExecuteRequestStep(Action<HttpContextBase,Action>)

指定在执行请求执行步骤时要调用的回调。

RegisterModule(Type)

注册应用程序模块。

ToString()

返回一个表示当前对象的字符串。

(继承自 Object)

活动

名称 说明
AcquireRequestState

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

AuthenticateRequest

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

AuthorizeRequest

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

BeginRequest

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

Disposed

释放应用程序时发生。

EndRequest

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

Error

引发未经处理的异常时发生。

LogRequest

在 ASP.NET 对当前请求执行任何日志记录之前发生。

MapRequestHandler

选择处理程序以响应请求时发生。

PostAcquireRequestState

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

PostAuthenticateRequest

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

PostAuthorizeRequest

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

PostLogRequest

当 ASP.NET 已完成处理 LogRequest 事件的所有事件处理程序时发生。

PostMapRequestHandler

当 ASP.NET 将当前请求映射到相应的事件处理程序时发生。

PostReleaseRequestState

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

PostRequestHandlerExecute

当 ASP.NET 事件处理程序(例如,页面或 XML Web 服务)完成执行时发生。

PostResolveRequestCache

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

PostUpdateRequestCache

当 ASP.NET 完成更新缓存模块并存储用于处理来自缓存的后续请求的响应时发生。

PreRequestHandlerExecute

在 ASP.NET 开始执行事件处理程序(例如,页面或 XML Web 服务)之前发生。

PreSendRequestContent

在 ASP.NET 将内容发送到客户端之前发生。

PreSendRequestHeaders

在 ASP.NET 将 HTTP 标头发送到客户端之前发生。

ReleaseRequestState

在 ASP.NET 完成执行所有请求事件处理程序后发生。 此事件会导致状态模块保存当前状态数据。

RequestCompleted

在释放与请求关联的托管对象时发生。

ResolveRequestCache

当 ASP.NET 完成授权事件以允许缓存模块处理来自缓存的请求、绕过事件处理程序的执行(例如,页面或 XML Web 服务)时发生。

UpdateRequestCache

当 ASP.NET 完成执行事件处理程序时发生,以便缓存模块存储将用于处理缓存中后续请求的响应。

显式接口实现

名称 说明
IHttpAsyncHandler.BeginProcessRequest(HttpContext, AsyncCallback, Object)

启动对 HTTP 事件处理程序的异步调用。

IHttpAsyncHandler.EndProcessRequest(IAsyncResult)

在进程完成时提供异步进程 End 方法。

IHttpHandler.IsReusable

获取一个值,该值指示另一个 Boolean 请求是否可以使用该 IHttpHandler 对象。

IHttpHandler.ProcessRequest(HttpContext)

允许通过实现 IHttpHandler 接口的自定义 HTTP 处理程序处理 HTTP Web 请求。

适用于

另请参阅