






























本文说明了一个为 ASP.NET 应用程序中以 .sample 作为 URL 结尾的资源而完成同步请求处理的 HTTP 处理器代码。该代码如下所示:
提示:ASP.NET Development Server 会在配置文件被改变并且包括新处理器的引用的时候服务于新资源的请求。如果要允许 IIS 为这些请求而提供服务,那么就请参考下面的步骤。
当用户所请求的资源是以 .sample 作为 URL 结尾的时候,Web 服务器就会把请求转送到 ASP.NET。然后 ASP.NET 会调用相应的 HTTP 处理器,从而返回一个回应。被返回的回应是通过处理器而被动态创建的;所以并不需要检测 .sample 扩展名是否存在。关于 ASP.NET 如何与 Web 服务器相互作用的更多信息,请参考:[ASP.NET 生命周期]。
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 处理器类之后,你还必须把它注册进应用程序的 Web.config 文件中。这样做允许 ASP.NET 在接收到以 .sample 作为 URL 结尾的资源请求的时候来查找相应的处理器。
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.sample"
type="HelloWorldHandler"/>
</httpHandlers>
</system.web>
</configuration>这个代码会通过类名称来注册你的自定义处理器,并且把 .sample 文件扩展名映射到该处理器。
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 的资源请求来对它进行测试。
http://localhost/SampleApplication/test.sample
然后,定义在 HelloWorldHandler 类中的文字就会被显示。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。