如何:创建 HTTP 处理程序工厂

  来源:MSDN

如何:创建 HTTP 处理程序工厂

IHttpHandlerFactory 接口用于创建和管理处理请求的 HTTP 处理程序。因此,可以创建一个实现 IHttpHandlerFactory接口的类,然后将该类用作 HTTP 处理程序。这样可以更好地控制对 HTTP 请求的处理,因为这样可将 URL 映射到基于一组复杂条件创建不同处理程序的 HTTP 处理程序工厂。例如,使用 HTTP 处理程序工厂可以创建访问昂贵或有限资源(如数据库连接等)的数量有限的 HTTP 处理程序对象,然后在以后的请求中重用这些处理程序对象。

在下面的示例中,使用 HTTP 处理程序工厂为用扩展名 .sample 标识的资源创建了两个处理程序;一个用于 HTTP GET 请求,另一个用于 HTTP POST 请求。第一个处理程序是在如何:创建同步 HTTP 处理程序中创建的处理程序的实例;第二个处理程序是在如何:创建异步 HTTP 处理程序中创建的处理程序的实例。

创建自定义 HTTP 处理程序工厂

创建 HandlerFactory HTTP 处理程序工厂类

1.        在网站的 App_Code 目录中创建一个名为 HelloWorldHandler的类。

2.        向类文件中添加下面的代码。

C# 代码

 

using System;

using System.Web;

class HandlerFactory : IHttpHandlerFactory

{

    public IHttpHandler GetHandler(HttpContext context,

        string requestType, String url, String pathTranslated)

    {

        IHttpHandler handlerToReturn;

        if ("get" == context.Request.RequestType.ToLower())

        {

            handlerToReturn = new HelloWorldHandler();

        }

        else if ("post" == context.Request.RequestType.ToLower())

        {

            handlerToReturn = new HelloWorldAsyncHandler();

        }

        else

        {

            handlerToReturn = null;

        }

        return handlerToReturn;

    }

    public void ReleaseHandler(IHttpHandler handler)

    {

    }

    public bool IsReusable

    {

        get

        {

            return false;

        }

    }

}

3.        这段代码实现 IHttpHandlerFactory接口的 GetHandler 方法,并在请求为 GET请求时返回所创建的同步处理程序。如果请求为 POST请求,则返回异步处理程序接口。

创建自定义 HTTP 处理程序

自定义 HTTP 处理程序工厂返回在如何:创建同步 HTTP 处理程序中创建的同步处理程序,或者返回在如何:创建异步 HTTP 处理程序中创建的异步处理程序。必须既创建同步 HelloWorldHandler类又创建异步 HelloWorldAsyncHandler类,自定义 HTTP 处理程序工厂才能返回这些处理程序。

创建 HelloWorldHandler 和 HelloWorldAsyncHandler 类

1.        在网站的 App_Code 目录中创建一个名为 HelloWorldHandler的类。

2.        如何:创建同步 HTTP 处理程序中的代码添加到类文件中。

3.        在网站的 App_Code 目录中创建一个名为 HelloWorldAsyncHandler的类。

4.        如何:创建异步 HTTP 处理程序中的代码添加到类文件中。

注册自定义 HTTP 处理程序工厂

创建完自定义 HTTP 处理程序工厂类后,必须在网站的 Web.config 文件中注册它。这使 ASP.NET 可以使用该处理程序工厂类服务于向文件扩展名为 .sample 的资源发出的请求。

在 Web.config 文件中注册自定义 HTTP 处理程序

1.        将 Web.config 文件添加到网站(如果该文件尚未存在)。

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

 

 

<configuration>

 <system.web>

    <httpHandlers>      <add verb="GET,POST" path="*.sample"        type="HandlerFactory" />    </httpHandlers>

 </system.web>

</configuration>

3.        这段代码使用 HandlerFactory的类名和处理程序名注册该处理程序。

在 IIS 6.0 中配置 HTTP 处理程序扩展名

Internet 信息服务 (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 信息服务(IIS)管理器”。

2.        右击应用程序名称,然后单击“属性”。

注意

有关创建 ASP.NET 应用程序的说明,请参见如何:在 IIS 中创建和配置本地 ASP.NET 网站。

3.        单击“虚拟目录”选项卡,然后单击“配置”。

4.        在“映射”选项卡上,单击“添加”。

将显示“添加/编辑应用程序扩展名映射”对话框。

5.        在“可执行文件”框中,键入或浏览至 Aspnet_isapi.dll 文件。默认情况下,该文件位于以下位置。

 

 

%windows%"Microsoft.NET"Framework"version"

注意

可以从其他映射(如 .aspx 文件的映射)获得完整路径和文件名。

6.        在“扩展名”框中,键入 .sample

7.        清除“确认文件是否存在”复选框。

8.        单击“确定”,然后关闭 IIS 管理器。

测试自定义 HTTP 处理程序工厂

创建并注册了自定义 HTTP 处理程序工厂后,可以创建 HTML 页(使该页请求具有 .sample 文件扩展名的资源)来对其进行测试。

测试自定义 HTTP 处理程序工厂

1.        在应用程序中创建一个 HTML 页(文件扩展名为 .htm)。

2.        在该页的 body节中,添加下面的代码。

 

 

<form action="Sample.sample" method="get">

 <input type="submit" value="Submit to Sample.sample via Get" />

</form>

<br />

<form action="Sample.sample" method="post">

 <input type="submit" value="Submit to Sample.sample via Post" />

</form>

3.        在浏览器中请求该 HTML 页。

4.        单击其中的一个按钮。

如果单击了第一个按钮,则 HTTP 处理程序工厂将通过创建和调用同步 HTTP 处理程序来响应请求。如果单击了第二个按钮,则 HTTP 处理程序工厂将通过创建和调用异步 HTTP 处理程序来响应请求。

原文地址:https://www.cnblogs.com/SummerRain/p/1050695.html