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

来源:互联网 发布:win7网络客户端安装 编辑:程序博客网 时间:2024/05/18 23:13

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

本文分成以下几个部分:

  • HTTP 模块
    可用事件配置 HTTP 模块创建 HTTP 模块
  • 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  (http://support.microsoft.com/kb/308000/EN-US/ ) HOW TO:Create an ASP.NET HTTP Module by Using Visual Basic .NET
307996  (http://support.microsoft.com/kb/307996/EN-US/ ) 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 知识库中相应的文章:

原创粉丝点击