7

当您的应用程序中有图像标签时,如下所示:

<img src = @Url.Content("~/foo/bar.jpg") />

或者像这样:

<asp:image src = "~/foo/bar.jpg" />

或者像这样:

<input type = "image" ...>

如果这恰好是一个 ASP.NET 应用程序(我认为 Web 窗体或 MVC 与问题无关,因为提供图像的代码必须相同),哪个特定组件为图像请求提供服务?

它是 Web 服务器(IIS 或 Visual Studio 的内部 Web 服务器)还是微软编写的 ASP.NET HttpHandler。

我记得曾经有一个处理程序用于在 ASP.NET 2.0 中提供资源文件。那也是提供图像的吗?它叫什么?

我为什么要问这个问题/我想做什么

我有一个 ASP.NET MVC 应用程序,我想编写自己的自定义 HttpHandler 或 Controller 来提供图像等静态资产,以便它们被缓存。

我打算做的事情几乎与http://blog.hompus.nl/2011/03/11/make-your-browser-cache-the-output-of-an-httphandler/http:// /archive.msdn.microsoft.com/ResourceCache

我想确保如果 Microsoft 已经编写了一个,我可能需要在响应中发送回 Http 标头时采取一些预防措施,以使 Microsoft 内置的 httpHandler 集的标头与我设置的标头不矛盾。

4

2 回答 2

2

默认情况下,所有对 ASPX 页面的请求(包括其中的静态资源,如图像)都由 default 提供服务HttpHandler,它是PageHandlerFactory一个实例:

动态创建实例以处理对 ASP.NET 文件的请求。PageHandlerFactory 类是 ASP.NET 页面的默认处理程序工厂实现。

正如您从MSDN 关于 HttpHandlers 和 HttpModules 的文章中看到的那样,主要的“内置”处理程序是那些用于

  • 标准 ASP.NET 文件 (.aspx),
  • 网络服务 (.asmx),
  • 通用的非 UI 处理程序 (.ashx),以及
  • 一种用于处理跟踪 (trace.axd)。

没有一个专门处理图像请求。所以你应该好好去=)

于 2013-03-12T15:02:19.470 回答
1

好的,在我看来,ASP.NET 不太关心任何静态资源,因此,它不会为任何这些资源向 IIS 注册 ISAPI 过滤器。

这意味着,作为想要为静态资源编写特定处理程序的开发人员,您几乎可以自由地做任何您想做的事情。

于 2013-03-14T13:25:43.643 回答