如何:创建 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 处理程序来响应请求。