INFO:ASP.NET HTTP 模块和 HTTP 处理程序概述

文章翻译 文章翻译
文章编号: 307985 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍了 ASP.NET HTTP 模块和 HTTP 处理程序。

有关其他 ASP.NET 概述,请参阅下面的 Microsoft 知识库文章:
305140 INFO:ASP.NET Roadmap

更多信息

HTTP 模块和 HTTP 处理程序是 ASP.NET 体系结构的组成部分。在对一个请求进行处理时,由多个 HTTP 模块(例如,身份验证模块和会话模块)处理每个请求,然后再由单个 HTTP 处理程序来处理。处理程序处理请求之后,该请求再通过 HTTP 模块流转回来。

本文分成以下几个部分:

HTTP 模块

模块在执行处理程序前后调用。模块使开发人员可以截获、参与或修改各个请求。模块实现 IHttpModule 接口,该接口位于 System.Web 名称空间中。

可用事件

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 模块的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
308000 HOW TO:Create an ASP.NET HTTP Module by Using Visual Basic .NET
307996 HOW TO:Create an ASP.NET HTTP Module by Using Visual C# .NET

HTTP 处理程序

处理程序用于处理各个终结点请求。处理程序使 ASP.NET 框架可以处理应用程序内的单个 HTTP URL 或成组的 URL 扩展。与模块不同,只有一个处理程序用于处理请求。所有处理程序均实现 IHttpHandler 接口,该接口位于 System.Web 名称空间中。处理程序在某些方面与 Internet 服务器应用程序编程接口 (ISAPI) 扩展类似。

配置 HTTP 处理程序

<httpHandlers> 配置节处理程序负责将传入的 URL 映射到 IHttpHandlerIHttpHandlerFactory 类。它可以在计算机、站点或应用程序级别声明。子目录将继承这些设置。

管理员使用 <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 接口。 有关创建 HTTP 处理程序的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
308001 HOW TO:Create an ASP.NET HTTP Handler by Using Visual C# .NET
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
307997 HOW TO:Create an ASP.NET HTTP Handler by Using Visual Basic .NET

属性

文章编号: 307985 - 最后修改: 2003年9月15日 - 修订: 2.2
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.0
关键字:?
kbarttyperoadmap kbhttphandlers kbhttpmodule kbhttpruntime kbinfo KB307985
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com