使用 ashx 或处理程序有什么好处?另外,如果我使用 MVC(为什么不),我需要它们吗?
框架重要吗(2.0+)?
为什么我要使用处理程序?最近有人建议我使用一个来检索图像,但我不知道为什么。
感谢您的时间。
编辑 - 处理程序更快吗?
仅举几个例子:
动态图像生成:您可以编写返回数据驱动图像的处理程序,方法是创建一个返回图像数据的 ASHX 处理程序,然后在标签中使用该 URL。例如<img alt="user's custom icon" src="Icon.ashx?username=bob"></img>
将基于 REST 的 XML 或 JSON 数据返回到客户端上的 AJAX 代码。
我相信这从 1.0 开始就可用
非 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();
}
}
如果您在无法访问 IIS 但想要更改诸如未来到期响应标头之类的内容以优化 css、图像、JavaScript 等文件的缓存的环境中工作,它们将非常有用
对于图像,您可以执行动态优化之类的操作,因此您可以请求 image.jpg.ashx?w=180&quality=70 之类的图像,然后使用处理程序根据查询字符串中传递的设置传递图像
aspx 继承了实现 IRequireSessionState 的页面。因此,如果您通过 Ajax 调用它,那么 asp.net 需要在进一步处理之前锁定会话。
对于 ashx 文件,它是无状态的。除非你从 IRequireSessionState 继承它来管理状态。
对所有 Ajax 调用使用 ashx,对纯 asp.net 页面使用 aspx。