ASP.NET HTTP 模块和 HTTP 处理程序
本文介绍 (HTTP) 模块和 HTTP 处理程序 ASP.NET 超文本传输协议。
原始产品版本: ASP.NET
原始 KB 编号: 307985
摘要
HTTP 模块和 HTTP 处理程序是 ASP.NET 体系结构不可或缺的一部分。 处理请求时,每个请求都由多个 HTTP 模块处理 (例如,身份验证模块和会话模块) ,然后由单个 HTTP 处理程序处理。 处理程序处理请求后,请求会流回 HTTP 模块。
HTTP 模块概述
在处理程序执行之前和之后调用模块。 通过模块,开发人员可以截获、参与或修改每个请求。 模块实现 IHttpModule
接口,该接口位于 命名空间中 System.Web
。
HTTP 模块可以与之同步的可用事件
类 HttpApplication
提供模块可以与之同步的多个事件。 以下事件可供模块在每个请求上进行同步。 这些事件按顺序列出:
BeginRequest
:请求已启动。 如果需要在请求开始时执行某些操作 (例如,在每个页面的顶部显示广告横幅) ,请同步此事件。AuthenticateRequest
:例如,如果要插入自己的自定义身份验证方案 (,请针对数据库查找用户以验证密码) ,生成一个模块来同步此事件并按所需方式对用户进行身份验证。AuthorizeRequest
:此事件在内部用于实现授权机制 (例如,将访问控制列表 (ACL) 存储在数据库中,而不是存储在文件系统) 中。 虽然可以重写此事件,但这样做的理由并不多。ResolveRequestCache
:此事件确定是否可以从输出缓存提供页面。 例如,如果要 (编写自己的缓存模块,请生成基于文件的缓存而不是内存缓存) ,请同步此事件以确定是否从缓存中为页面提供服务。AcquireRequestState
:从状态存储中检索会话状态。 如果要生成自己的状态管理模块,请同步此事件以从状态存储中获取会话状态。PreRequestHandlerExecute
:此事件在执行 HTTP 处理程序之前发生。PostRequestHandlerExecute
:执行 HTTP 处理程序后发生此事件。ReleaseRequestState
:会话状态重新存储在状态存储中。 如果要生成自定义会话状态模块,则必须将状态重新存储在状态存储中。UpdateRequestCache
:此事件将输出写回到输出缓存。 如果要生成自定义缓存模块,请将输出写回到缓存。EndRequest
:请求已完成。 你可能想要生成一个调试模块,用于收集整个请求的信息,然后将信息写入页面。
对于每个请求传输,模块可以使用以下事件进行同步。 这些事件的顺序是不确定的。
PreSendRequestHeaders
:此事件在发送标头之前发生。 如果要添加其他标头,可以从自定义模块同步此事件。PreSendRequestContent
:调用 方法时发生Response.Flush
此事件。 如果要添加其他内容,可以从自定义模块同步此事件。Error
:发生未经处理的异常时,将发生此事件。 如果要编写自定义错误处理程序模块,请同步此事件。
配置 HTTP 模块
配置 <httpModules>
节处理程序负责在应用程序中配置 HTTP 模块。 可以在计算机、站点或应用程序级别声明它。 对 <httpModules>
节处理程序使用以下语法:
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
创建 HTTP 模块
若要创建 HTTP 模块,必须实现 IHttpModule
接口。 接口 IHttpModule
有两个具有以下签名的方法:
void Init(HttpApplication);
void Dispose();
HTTP 处理程序概述
处理程序用于处理单个终结点请求。 处理程序使 ASP.NET 框架能够处理应用程序中的单个 HTTP URL 或 URL 扩展组。 与模块不同,只有一个处理程序用于处理请求。 所有处理程序都实现 IHttpHandler
接口,该接口位于 中 System.Web namespace
。 处理程序类似于 Internet 服务器应用程序编程接口 (ISAPI) 扩展。
配置 HTTP 处理程序
配置 <httpHandlers>
节处理程序负责将传入 URL 映射到 IHttpHandler
或 IHttpHandlerFactory
类。 可以在计算机、站点或应用程序级别声明它。 子目录继承这些设置。
管理员使用 <add>
标记指令来配置 <httpHandlers>
节。
<Add>
指令按自上而下的顺序进行解释和处理。 对 <httpHandler>
节处理程序使用以下语法:
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
创建 HTTP 处理程序
若要创建 HTTP 处理程序,必须实现 IHttpHandler
接口。 接口 IHttpHandler
有一个方法和一个具有以下签名的属性:
void ProcessRequest(HttpContext);
bool IsReusable {get;}
注意
如果 HTTP 处理程序中需要会话状态,则还需要实现 IRequiresSessionState
接口。