HttpApplication 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义对 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 中。
HttpApplication在 .NET Framework 版本 3.5 中引入。 有关详细信息,请参见版本和依赖关系。
注意
在集成模式下运行 IIS 7.0 时,App_Code文件夹或 Bin 文件夹中的自定义模块适用于请求管道中的所有请求。 Global.asax 文件中的事件处理程序代码仅适用于映射到 ASP.NET 处理程序的请求。
应用程序事件按以下顺序引发:
-
在 PostResolveRequestCache 事件之后和 事件之前 PostMapRequestHandler ,事件处理程序 (创建与请求 URL) 对应的页面。 当服务器在集成模式下运行 IIS 7.0,并且至少.NET Framework版本 3.0 时,MapRequestHandler将引发 事件。 当服务器在经典模式或早期版本的 IIS 中运行 IIS 7.0 时,无法处理此事件。
-
执行事件处理程序。
-
PostReleaseRequestState引发事件后,任何现有响应筛选器都将筛选输出。
-
IIS 7.0 集成模式支持此事件,至少支持 .NET Framework 3.0
-
此事件支持 IIS 7.0 集成模式,至少支持 .NET Framework 3.0
构造函数
HttpApplication() |
初始化 HttpApplication 类的新实例。 |
属性
Application |
获取应用程序的当前状态。 |
Context |
获取关于当前请求的 HTTP 特定信息。 |
Events |
获取处理所有应用程序事件的事件处理程序委托列表。 |
Modules |
获取当前应用程序的模块集合。 |
Request |
获取当前请求所对应的内部请求对象。 |
Response |
获取当前请求所对应的内部响应对象。 |
Server |
获取当前请求所对应的内部服务器对象。 |
Session |
获取提供对会话数据的访问的内部会话对象。 |
Site |
获取或设置 IComponent 实现的网站接口。 |
User |
获取当前请求的内部用户对象。 |
方法
事件
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 service)执行完毕时发生。 |
PostResolveRequestCache |
在 ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。 |
PostUpdateRequestCache |
在 ASP.NET 完成缓存模块的更新并存储了用于从缓存中为后续请求提供服务的响应后,发生此事件。 |
PreRequestHandlerExecute |
恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。 |
PreSendRequestContent |
恰好在 ASP.NET 向客户端发送内容之前发生。 |
PreSendRequestHeaders |
恰好在 ASP.NET 向客户端发送 HTTP 标头之前发生。 |
ReleaseRequestState |
在 ASP.NET 执行完所有请求事件处理程序后发生。 该事件将使状态模块保存当前状态数据。 |
RequestCompleted |
当托管对象与已经释放的请求相关联时发生。 |
ResolveRequestCache |
在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序(例如某个页或 XML Web services)的执行。 |
UpdateRequestCache |
当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。 |
显式接口实现
IHttpAsyncHandler.BeginProcessRequest(HttpContext, AsyncCallback, Object) |
启动对 HTTP 事件处理程序的异步调用。 |
IHttpAsyncHandler.EndProcessRequest(IAsyncResult) |
在进程完成时提供一个异步进程 |
IHttpHandler.IsReusable |
获取一个 |
IHttpHandler.ProcessRequest(HttpContext) |
通过实现 IHttpHandler 接口的自定义 HTTP 处理程序启用 HTTP Web 请求的处理。 |