实践:创建同步 HTTP 处理器

本文说明了一个为 ASP.NET 应用程序中以 .sample 作为 URL 结尾的资源而完成同步请求处理的 HTTP 处理器代码。该代码如下所示:

  • HTTP 处理器类的代码。该类必须实现 ProcessRequest 方法和 IsReusable 属性。
  • 在 Web.config 文件中注册处理器并且映射到 .sample 文件扩展名的元素是必需的。
  • 如何在 Internet Information Services(IIS)中把 .sample 文件扩展名映射到 ASP.NET。

提示:ASP.NET Development Server 会在配置文件被改变并且包括新处理器的引用的时候服务于新资源的请求。如果要允许 IIS 为这些请求而提供服务,那么就请参考下面的步骤。

当用户所请求的资源是以 .sample 作为 URL 结尾的时候,Web 服务器就会把请求转送到 ASP.NET。然后 ASP.NET 会调用相应的 HTTP 处理器,从而返回一个回应。被返回的回应是通过处理器而被动态创建的;所以并不需要检测 .sample 扩展名是否存在。关于 ASP.NET 如何与 Web 服务器相互作用的更多信息,请参考:[ASP.NET 生命周期]。

创建自定义的 HelloWorldHandler HTTP 处理器类

  1. 在你的 Web 站点的 App_Code 目录中创建一个名为 HelloWorldHandler 的类。
  2. 添加下列代码到你的类文件中。
    using System.Web;
    
    public class HelloWorldHandler : IHttpHandler
    
    {
    
        public HelloWorldHandler()
    
        {
    
        }
    
        public void ProcessRequest(HttpContext context)
    
        {
    
            HttpRequest Request = context.Request;
    
            HttpResponse Response = context.Response;
    
            // 只要被请求的文件扩展名是 .sample,那么这个处理器始终都会被调用。
    
            // 并且不需要检测拥有这个扩展名的文件是否已经存在。
    
            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
    
        {
    
            // 如果需要使用对象池,那么就可以在这里返回 true 值。
    
            // 这样做会把处理器保持在内存中。
    
            get { return false; }
    
        }
    
    }

    这个代码实现了 ProcessRequest 方法并且把一个字符串输出到了当前 HttpContext 对象的 Response 属性。

注册自定义的 HTTP 处理器

在你创建了自定义的 HTTP 处理器类之后,你还必须把它注册进应用程序的 Web.config 文件中。这样做允许 ASP.NET 在接收到以 .sample 作为 URL 结尾的资源请求的时候来查找相应的处理器。

在 Web.config 文件中注册一个自定义的 HTTP 处理器
  1. 添加一个 Web.config 文件到你的 Web 站点中,如果该文件不存在的话。
  2. 添加下列元素到你的 Web.config 文件中。
    <configuration>
    
        <system.web>
    
            <httpHandlers>
    
                <add verb="*" path="*.sample" 
    
                      type="HelloWorldHandler"/>
    
            </httpHandlers>
    
        </system.web>
    
    </configuration>

    这个代码会通过类名称来注册你的自定义处理器,并且把 .sample 文件扩展名映射到该处理器。

在 IIS 6.0 中配置 HTTP 处理器扩展

IIS 只会把特定文件类型的请求传递给 ASP.NET 服务。默认时,拥有文件扩展名(比如 .aspx、.ascx,.asmx)的文件已经在 IIS 6.0 中被映射到 ASP.NET ISAPI 扩展(Aspnet_isapi.dll)。但是,如果你需要 ASP.NET 处理自定义的 URL 扩展,那么你就必须在 IIS 中对这些扩展进行映射。关于更多信息,请参考:[ASP.NET 生命周期]。

在 IIS 6.0 中把 .sample 文件扩展名映射到 ASP.NET
  1. 打开 Internet Information Services(IIS)Manager。
  2. 右击你的应用程序名称,然后点击 Properties。

    提示:关于创建 ASP.NET 应用程序的指令,请参考:[实践:在 IIS 中创建并且配置本地 ASP.NET Web 站点]。

  3. 点击 Virtual Directory 标签,然后点击 Configuration。
  4. 在 Mapping 标签中,点击 Add。

    Add/Edit Application Extension Mapping 对话框被显示。

  5. 在 Executable 文本框中,输入或者浏览文件 Aspnet_isapi.dll。默认时,这个文件位于下列位置。
    %windows%\Microsoft.NET\Framework\版本号\

    提示:你也可以从其他映射中得到完整的路径和文件名,比如 .aspx 文件的映射。

  6. 在 Extension 文本框中,输入 .sample。
  7. 清除 Verify that file exists 复选框。
  8. 点击 OK 然后关闭 IIS Manager。

测试自定义的 HTTP 处理器

在你创建并且注册你的自定义 HTTP 处理器之后,你就可以通过发送文件扩展名是 .sample 的资源请求来对它进行测试。

测试你的自定义 HTTP 处理器
  • 在你的浏览器中,输入一个定位于你的 Web 应用程序并且以 .sample 作为结尾的 URL,比如:
    http://localhost/SampleApplication/test.sample

    然后,定义在 HelloWorldHandler 类中的文字就会被显示。

你可能感兴趣的:(http)