【技术随笔】ASHX Handler
最近项目要退役 ASHX,但是我对其并不了解,于是简单看了一下是做什么的。
什么是 ASHX 处理程序
某些ASP.NET是动态的。它们使用 C# 代码或磁盘资源生成。这些文件不需要 Web 窗体。相反,ASHX 泛型处理程序是理想的。它可以从查询字符串返回图像、写入 XML 或任何其他数据。
在框架中使用 ASHX ASP.NET目标
我们在 URL 中使用 ASHX 文件,并动态返回内容。我们将使用查询字符串。最后的 URL 将看起来像这样。
入门
创建 ASHX 文件
打开ASP.NET网站。转到网站菜单并单击第一个菜单项,"添加新项目..."这将显示"添加新项目"对话框。
选择"通用处理程序"项,你会得到一个新文件,其中有一些代码称为处理程序.ashx。
自动生成代码
它定义了 IHttpHandler 接口的两个部分。重要部分是 ProcessRequest(),每当请求 Handler.ashx 文件时,都会调用该请求。
映射
将较旧的 URL 或路径映射到新的 ASHX 文件。对于向后兼容性和搜索引擎优化,您可能希望新处理程序接管站点中的旧 URL。
<system.web>
<urlMappings enabled="true">
<add url="~/Default.aspx" mappedUrl="~/Handler.ashx"/>
</urlMappings>
添加示例图像
您可以对涉及图像的 ASHX 文件做什么。在磁盘或 Internet 上查找您最喜爱的图像,并将其添加到您的网站项目中。以我为例,我选择的图像是"Flower1.png"。
修改处理程序.ashx
处理程序有两个部分。在这里,我们修改进程请求方法。我们可以更改文件的内容类型和响应内容。使用图像 ContentType 和文件名修改 Handler.ashx 与以下内容类似。
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
// Comment out these lines first:
// context.Response.ContentType = "text/plain";
// context.Response.Write("Hello World");
context.Response.ContentType = "image/png";
context.Response.WriteFile("~/Flower1.png");
}
public bool IsReusable {
get {
return false;
}
}
}
测试处理程序
在这里,我们在本地计算机上测试新的配置和 ASHX 文件。现在单击绿色箭头在开发服务器上运行您的网站。您应该在浏览器中看到图像。这是处理程序的结果。
添加功能
到目前为止,这里的例子相对来说毫无用处。它所做就是允许我们通过ASHX处理程序管道图像。您可以向 C# 语言的处理程序添加任何功能(日志记录代码或引用者逻辑)。
此外,开发人员通常需要在请求上使用 QueryString 集合。您可以在处理程序中使用请求.查询字符串,就像在任何 ASPX Web 窗体页面上一样。代码是相同的。
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
HttpResponse r = context.Response;
r.ContentType = "image/png";
//
// Write the requested image
//
string file = context.Request.QueryString["file"];
if (file == "logo")
{
r.WriteFile("Logo1.png");
}
else
{
r.WriteFile("Flower1.png");
}
}
public bool IsReusable {
get {
return false;
}
}
}
上述代码接收请求,然后根据 QueryString 集合值返回不同的文件。它将从两个查询字符串返回两个图像之一。将显示它返回的字符串。
-
URL 1
- 网址: http://www.dotnetperls.com/?file=logo
- 文件查询字符串:徽标
- 文件写: Logo1.png
-
URL 2
-
网址: http://www.dotnetperls.com/?file=flower
- 文件查询字符串:花
- 文件写: 花1.png
性能
使用 ASHX 文件是否有任何性能优势或更改?这些文件不太复杂,它们不涉及尽可能多的事件。它们更精简,涉及的代码更少,这是一个优势。
总结
我们在一个用户网站中使用了 ASHX ASP.NET处理程序。这可以填补许多不同的重要网站功能。我们将 urlMappings 与自定义处理程序上的查询字符串相结合,以极大地简化和简化端到端网站代码。