演练:创建同步 HTTP 处理程序

更新:2007 年 11 月

本演练演示如何创建执行请求的同步处理的 HTTP 处理程序。示例处理程序处理 ASP.NET 应用程序中对其 URL 以 .sample 结尾的资源的请求。

当用户请求一个其 URL 以 .sample 结尾的资源时,Web 服务器将该请求转发给 ASP.NET。然后 ASP.NET 调用 HTTP 处理程序,后者返回一个响应。响应由该处理程序动态创建。无需存在文件扩展名为 .sample 的文件。

有关 ASP.NET 运行时如何与 IIS 6.0 交互的更多信息,请参见 IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述。有关 ASP.NET 与 IIS 7.0 集成的更多信息,请参见 IIS 7.0 的 ASP.NET 应用程序生命周期概述

本演练阐释以下任务:

  • 如何创建 HTTP 处理程序类的代码。该类必须实现 ProcessRequest 方法和 IsReusable 属性。

  • 如何在 Web.config 文件中注册处理程序并将 .sample 文件扩展名映射到该处理程序。

  • 如何在 Internet 信息服务 (IIS) 中将 .sample 文件扩展名映射到 ASP.NET。

    说明:

    在将配置文件更改为包含对新处理程序的引用后,ASP.NET Development Server 将处理对资源的请求。有关 ASP.NET Development Server 的更多信息,请参见 Visual Web Developer 中的 Web 服务器。若要启用 IIS 以处理该请求,请参见本演练后面的过程。

先决条件

若要完成本演练,您需要:

  • Visual Studio 或 Visual Web Developer。

  • 可以使用 IIS 运行的 ASP.NET 网站。

  • IIS 6.0 或 IIS 7.0。

创建同步 HTTP 处理程序类

创建自定义 HelloWorldHandler HTTP 处理程序类

  1. 如果要使用的网站还没有 App_Code 文件夹,请在该站点的根目录下创建这样一个文件夹。

  2. 在 App_Code 目录中,创建一个名为 HelloWorldHandler 的类,并将下面的代码添加到类文件中。

    Imports System.Web
    
    Public Class HelloWorldHandler
        Implements IHttpHandler
    
        Public Sub ProcessRequest(ByVal context As _
                System.Web.HttpContext) Implements _
                System.Web.IHttpHandler.ProcessRequest
            Dim request As HttpRequest = context.Request
            Dim response As HttpResponse = context.Response
            ' This handler is called whenever a file ending 
            ' in .sample is requested. A file with that extension
            ' does not need to exist.
            response.Write("<html>")
            response.Write("<body>")
            response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>")
            response.Write("</body>")
            response.Write("</html>")
        End Sub
    
        Public ReadOnly Property IsReusable() As Boolean _
                Implements System.Web.IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    End Class
    
    using System.Web;
    public class HelloWorldHandler : IHttpHandler
    {
        public HelloWorldHandler()
        {
        }
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest Request = context.Request;
            HttpResponse Response = context.Response;
            // This handler is called whenever a file ending 
            // in .sample is requested. A file with that extension
            // does not need to exist.
            Response.Write("<html>");
            Response.Write("<body>");
            Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
            Response.Write("</body>");
            Response.Write("</html>");
        }
        public bool IsReusable
        {
            // To enable pooling, return true here.
            // This keeps the handler in memory.
            get { return false; }
        }
    }
    

    这段代码实现了 ProcessRequest 方法,并将一个字符串写入当前 Response 对象的 HttpContext 属性。

在 IIS 6.0 中注册自定义 HTTP 处理程序

创建完自定义 HTTP 处理程序类后,必须在应用程序的 Web.config 文件中注册它。这样,ASP.NET 在收到对 URL 以 .sample 结尾的资源的请求时,可以找到该处理程序。

注册处理程序的过程会有所不同,取决于使用的是 IIS 6.0 还是 IIS 7.0。本节介绍如何在 IIS 6.0 中注册处理程序。下一节介绍如何在 IIS 7.0 中注册处理程序。

在 IIS 6.0 中注册处理程序

  1. 如果网站还没有 Web.config 文件,请在该站点的根目录下创建一个这样的文件。

  2. 将下面突出显示的元素添加到 Web.config 文件中。

    <configuration>
      <system.web>
        <httpHandlers>      <add verb="*" path="*.sample"         type="HelloWorldHandler"/>    </httpHandlers>
      </system.web>
    </configuration>
    

    该配置元素按类名注册自定义处理程序,并将 .sample 文件扩展名映射到该处理程序。

    使用 IIS 管理器为 .sample 文件扩展名注册一个应用程序扩展名映射。有关更多信息,请参见 如何:在 IIS 中配置 HTTP 处理程序扩展名

在 IIS 7.0 中注册自定义 HTTP 处理程序

在 IIS 7.0 中,应用程序可以在经典模式或集成模式下运行。在经典模式下,请求的处理方式与在 IIS 6.0 中大致相同。在集成模式下,IIS 7.0 使用管道(管道使其可以与 ASP.NET 共享请求、模块和其他功能)来管理请求。

对于 IIS 7.0,处理程序注册要求在 Web.config 文件或 IIS 管理器中注册处理程序。因为在 IIS 7.0 中进行集中管理,所以应用程序的 Web.config 文件中的更改会在该应用程序的 IIS 管理器接口中反映出来,反之亦然。在后面的过程中,处理程序是在 Web.config 文件中注册的。

对于在经典模式和集成模式下运行的 IIS 7.0,注册处理程序的过程是不相同的。请根据您要使用的 IIS 模式执行相应的过程。

在运行于经典模式下的 IIS 7.0 中注册处理程序

  1. 如果网站还没有 Web.config 文件,请在该站点的根目录下创建一个这样的文件。

  2. 将下面突出显示的元素添加到 Web.config 文件中。

    说明:

    替换为 aspnet_isapi.dll 文件的正确路径。该 .dll 文件位于安装 .NET Framework 的文件夹中。默认情况下,此文件夹为 C:\WINDOWS\Microsoft.NET\Framework\版本。

    <configuration>
      <system.web>
        <httpHandlers>      <add verb="*" path="*.sample"         type="HelloWorldHandler"/>    </httpHandlers>
      </system.web>
        <system.webServer>
            <handlers>            <add  verb="*" path="*.sample"                  name="HelloWorldHandler"                  type="HelloWorldHandler"                  modules="IsapiModule"/>                  scriptProcessor="%path%\aspnet_isapi.dll"        </handlers>
        </system.webServer>
    </configuration>
    

    该配置元素按类名注册自定义处理程序,并将 .sample 文件扩展名映射到该处理程序。

    说明:

    由于要注册自定义文件扩展名,因此在 handlers 节和 httpHandlers 节中都要注册该处理程序。为了向后兼容,在经典模式下要使用 modules 属性将该处理程序指定为 ISAPI 模块。使用 scriptProcessor 属性指定 ASP.NET ISAPI dll 的路径。name 属性在 handlers 节中是必需的。

在运行于集成模式下的 IIS 7.0 中注册处理程序

  1. 如果网站还没有 Web.config 文件,请在该站点的根目录下创建一个这样的文件。

  2. 将下面突出显示的元素添加到 Web.config 文件中。

    <configuration>
      <system.webServer>
        <handlers>      <add verb="*" path="*.sample"         name="HelloWorldHandler"        type="HelloWorldHandler"/>    </handlers>
      </system.webServer>
    </configuration>
    

    该配置元素按类名注册自定义处理程序,并将 .sample 文件扩展名映射到该处理程序。

    说明:

    在 handlers 节中进行注册,但不在 httpHandlers 节中进行。需要 name 属性。

测试自定义 HTTP 处理程序

创建并注册自定义 HTTP 处理程序后,可以对该处理程序进行测试。

测试自定义 HTTP 处理程序

  1. 在浏览器中,从 Web 应用程序请求页面。

  2. 在浏览器中,输入一个以 .sample 结尾的 URL。例如,输入以下 URL:

    https://localhost/SampleApplication/test.sample
    

    将显示在 HelloWorldHandler 类中定义的文本。

请参见

任务

如何:创建异步 HTTP 处理程序

概念

IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

其他资源

ASP.NET 生命周期