4

这可能很简单,但它真的让我很困惑。当我实现 IHttpHandler 时,我创建了一个处理程序,然后像这样在 web.config 中注册它:

IIS6 Portion:
<httpHandlers>
    <add verb="*" path="*.randomextension" type="MyProgramNameSpace.MyHandler" />
</httpHandlers>

IIS7 Portion:
<handlers>
    <add name="mine" verb="*" path="*. randomextension" type ="MyProgramNameSpace.MyHandler" />
</handlers>

它似乎工作得很好,并且可以使用不同的处理程序和选项。它让我通过直接访问管道来跳过 Page 类等等。但是,我经常会遇到文档,上面说我需要使用一些关于 ashx 或 axd 的东西。

这一切是怎么回事?这与创建处理程序有什么关系?

这可能很容易,但由于某种原因,我在处理这个 ashx 或 axd 处理程序时完全感到困惑。

4

3 回答 3

6

.asxh 处理程序只是一个预先存在/预定义的通用处理程序映射。与 .aspx 处理程序不同,您不限于从 Page 派生,也不会获得完整的 ASP.NET 页面处理程序事件管道。通常,您使用 .ashx 文件来处理以非标准内容作为输入或作为输出返回的非页面请求。

与 .ashx 处理程序和自定义 IHttpHandler 的区别并不大,真的。为 .ashx 文件预定义了很多配置,但是,您必须使用该扩展名。使用完全自定义的 IHttpHandler,您拥有完全的自由,但需要从头开始配置它。

于 2009-08-29T01:33:45.683 回答
3

真的没有区别。.ashx 文件实现 IHttpHandler 就像您正在做的那样。只有 .ashx 是一个预先注册的处理程序,所以您不需要自己将它添加到 web.config 中,它已经为您完成了。

于 2009-08-29T01:38:24.273 回答
2

如果您决定按文件类型使用扩展名,则您的处理程序是合适的。

另一方面,如果您正在尝试返回数据,而没有特定的扩展名,那么 ashx/ahd 扩展名也一样好。

例如,如果您有一组存储在数据库中的图像,您可以注册一个 .JPG 处理程序,该处理程序将从数据库而不是硬盘驱动器中提取图像。您还可以创建一个可以返回任何图像类型的 ASHX。

注册扩展可以使最终用户的 url 看起来更“正常”,而 ashx 看起来更通用(甚至是极客)。

于 2009-08-29T01:37:02.263 回答