ASHX处理程序文件在asp.net中有什么好处?

14

使用 ashx 或处理程序的好处是什么?如果我使用 MVC,是否需要它们(为什么不需要)?

框架是否重要(2.0+)?

为什么要使用处理程序?最近有人建议我使用一个来检索图像,但我不知道原因。

谢谢您的时间。

编辑 - 处理程序是否更快?

4个回答

17

仅举几个例子:

  1. 动态生成图片:您可以编写处理程序,通过创建返回图像数据的ASHX处理程序并在您的标记中使用该URL,来返回数据驱动的图片。例如:<img alt="user's custom icon" src="Icon.ashx?username=bob"></img>

  2. 返回基于REST的XML或JSON数据到客户端的AJAX代码。

  3. 自定义HTML:当ASP.NET Web Forms或MVC框架过于限制时,返回完全自定义的页面HTML。

我相信这项功能从1.0版本就已经可用了。


我能不使用处理程序来完成#1吗?我现在有它,但aspx页面进行二进制写入。 - johnny
4
ASPX页面使用的资源比ASHX处理程序多。 - Powerlord
是的,aspx可以进行二进制写入,但这不是它的本意。主要目的是呈现HTML内容。处理程序专门用于此类任务,因为您不需要定义一个空的aspx文件并在C#/VB中编写代码。 - Chetan S
是的,你可以不使用处理程序来完成#1。实际上,你可以在没有处理程序的情况下仅使用.aspx页面来完成所有操作。但是,处理程序的目的在于识别HTML视图与“其他类型的数据”的分离。因此,这就是我单独发布答案的原因。 - eduncan911
2
是的,但 ASHX 的开销要少得多。使用 ASPX 页面时,您会不必要地执行所有 ASP.NET 管道内容(视图状态、控件树等),而这些内容您永远不会使用。 - Mike Marshall

3
非MVC项目中处理程序的目的是提供某种编码响应,而不是HTML。通常,处理程序会返回XML(rss、RESTful等)、jQuery或其他JavaScript的JSON,有时甚至只返回纯数据,例如文件二进制下载。我曾经使用处理程序甚至返回特殊的javascript以在客户端上执行,作为一种按需加载大型二进制或需求的方法。总之,处理程序将用于返回“除HTML之外的任何内容”。
在MVC中,您将摆脱处理程序并利用控制器返回任何您喜欢的数据。因此,在像这样的方法中:
mywebsite.com/restapi/content/56223

您的RestfulContentController应该有一个Index()方法,它不会返回View(),而是纯XML或JSON。
public class JSONContentController : Controller
{
  public JsonResult Index(int ContentID)
  {
    // get Content() by ContentID
    //

    // return a JSON version
    return Content().SerializeToJSON();
  }
}

2

如果你在没有访问IIS的环境下工作,但想要更改类似于CSS、图片、JavaScript等文件的远期到期响应头以优化缓存,那么它们非常有用。

对于图片,你可以进行即时优化,因此你可以请求像image.jpg.ashx?w=180&quality=70这样的图像,然后使用处理程序根据查询字符串中传递的设置提供图像。


0

aspx继承了实现IRequireSessionState的页面。因此,如果您通过Ajax调用它,则asp.net需要在进一步处理之前锁定会话。

对于ashx文件而言,它是无状态的。 除非您从IRequireSessionState继承来管理状态。

对于所有Ajax调用,请使用ashx,并仅将aspx用于纯粹的asp.net页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接