



























接口 IHttpHandlerFactory 负责创建并且管理用来处理请求的 HTTP 处理器。事实上这也是有可能的,因此,你可以创建一个实现了 IHttpHandlerFactory 接口的类,然后把这个类当成 HTTP 处理器来使用。这可以允许优秀的控件把 URL 映射到一个基于复杂的条件集来创建不同处理器的 HTTP 处理器工厂,从而能够越过 HTTP 请求的处理。例如,通过使用 HTTP 处理器工厂,你能够创建有限数量的 HTTP 处理器对象来访问昂贵的或者有限的资源(比如数据库连接),然后在将来的请求中重用这些处理器对象。
在下列范例中,一个 HTTP 处理器工厂就创建了用来识别 *.sample 资源的两个处理器,并且分别用于 HTTP GET 请求和 HTTP POST 请求。代码中首先出现的是一个在[实践:创建同步 HTTP 处理器]中被创建的处理器实例;然后就是一个在[实践:创建异步 HTTP 处理器]中被创建的处理器实例。
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;
}
}
}该代码实现了 IHttpHandlerFactory 接口的 GetHandler 方法并且在出现 GET 请求的时候返回被创建的同步处理器。如果出现 POST 请求,那么它将返回异步的处理器接口。
自定义 HTTP 处理器工厂既可以返回在[实践:创建同步 HTTP 处理器]中所创建的同步处理器又可以返回在[实践:创建异步 HTTP 处理器]中所创建的异步处理器。因此你必须同时创建同步的 HelloWorldHandler 类和异步的 HelloWorldAsyncHandler 类才能够让自定义的 HTTP 处理器工厂正确地返回这些处理器。
在你创建完自定义 HTTP 处理器工厂类之后,你就必须把它注册到你的 Web 站点的 Web.config 文件中。这允许 ASP.NET 使用该处理器工厂类来为扩展名是 .sample 的资源请求而提供服务。
<configuration>
<system.web>
<httpHandlers>
<add verb="GET,POST" path="*.sample"
type="HandlerFactory" />
</httpHandlers>
</system.web>
</configuration>该代码以类名称和 HandlerFactory 的处理器名称来注册处理器。
Internet Information Services(IIS)只会把特定文件类型的请求传递给 ASP.NET 的服务。默认时,拥有扩展名 .aspx,.ascx 和 .asmx 的文件已经在 IIS 6.0 中被映射到了 ASP.NET ISAPI 扩展(Aspnet_isapi.dll)。因此,如果你需要 ASP.NET 来处理自定义的 URL 扩展的话,那么你就必须在 IIS 中映射这些扩展名。关于更多信息,请参考:[ASP.NET 生命周期]。
提示:关于创建 ASP.NET 应用程序的指导,请参考:[实践:在 IIS 中创建并且配置本地 ASP.NET Web 站点]。
Add/Edit Application Extension Mapping 对话框将会出现。
%windows%\Microsoft.NET\Framework\版本号\
提示:你可以从其他映射那里得到完整的路径和文件名,比如 .aspx 文件的映射。
在你创建并且注册了你的自定义 HTTP 处理器工厂之后,你就可以通过创建一个能够请求 .sample 资源的 HTML 页面来对它进行测试。
<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>
如果你点击的是第一个按钮,那么 HTTP 处理器工厂就会创建并且调用一个同步 HTTP 处理器来对请求产生回应。如果你点击的是第二个按钮,那么 HTTP 处理器工厂就会创建并且调用一个异步 HTTP 处理器来对请求产生回应。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。