HTTP 处理程序和工厂

HTTP 处理程序和工厂


概述

ASP.NET 提供低级别的请求/响应 API,使开发人员能够使用 .NET 框架类为传入的 HTTP 请求提供服务。为此,开发人员需创作支持 System.Web.IHTTPHandler 接口和实现 ProcessRequest() 方法的类。当处理 HTTP 请求不需要由高级别的页框架抽象化提供的服务时,处理程序通常很有用。处理程序的常用用途包括筛选器和类似 CGI 的应用程序,尤其是那些返回二进制数据的应用程序。

ASP.NET 收到的每个传入 HTTP 请求最终由实现 IHTTPHandler 的类的特定实例来处理。IHttpHandlerFactory 提供了处理 IHttpHandler 实例 URL 请求的实际解析的结构。除了 ASP.NET 提供的默认 IHttpHandlerFactory 类外,开发人员还可以选择创建和注册工厂以支持大量的请求解析和激活方案。

配置 HTTP 处理程序和工厂

HTTP 处理程序和工厂在 ASP.NET 配置中声明为 web.config 文件的一部分。ASP.NET 定义了一个 <httphandlers> 配置节,在其中可以添加和移除处理程序和工厂。子目录继承 HttpHandlerFactoryHttpHandler 的设置。

例如,在全局 machine.config 文件中,ASP.NET 将所有对 aspx 文件的请求映射到 PageHandlerFactory 类:

创建自定义 HTTP 处理程序

下面的示例创建一个对所有“SimpleHandler.aspx”请求进行处理的自定义 HttpHandler

 
VB SimpleHandler

[运行示例] | [查看源代码]

通过实现 IHttpHandler 接口可创建自定义 HTTP 处理程序,而该接口只包含两个方法。通过调用 IsReusable,HTTP 工厂可查询处理程序以确定是否可使用同一实例为多个请求提供服务。ProcessRequest 方法将 HttpContext 实例用作参数,这使它能够访问 RequestResponse 内部对象。下面的示例忽略请求数据,并将一个常数字符串作为对客户端的响应发送。

public class SimpleHandler : IHttpHandler {
            public void ProcessRequest(HttpContext context) {
            context.Response.Write("Hello World!");
            }
            public bool IsReusable {
            get {
            return true;
            }
            }
            }
            
C# VB JScript  

将已编译的处理程序程序集放置在应用程序的 \bin 目录中后,处理程序类可以被指定为请求的目标。在本例中,对“SimpleHandler.aspx”的所有请求都被路由到 SimpleHandler 类的实例(它存在于命名空间 Acme.SimpleHandler 中)。

<httphandlers> <add verb="*" path="SimpleHandler.aspx" type="Acme.SimpleHandler,SimpleHandler" /> </httphandlers>

本节小结

  1. HTTP 处理程序和工厂是 ASP.NET 页框架的主体。
  2. 工厂将每个请求分配给一个处理程序,后者处理该请求。
  3. 在 web.config 文件中定义工厂和处理程序。子目录继承工厂的设置。
  4. 若要创建自定义处理程序,请实现 IHttpHandler 并在目录中 web.config 的 <httphandlers> 节中添加类。
原文地址:https://www.cnblogs.com/wzyexf/p/355077.html