使用 .NET(网站项目),我如何拦截所有传入的图像请求并更改它们的请求路径?

Using .NET (website project), how can I intercept all incoming image requests and alter their request path?

感谢观看。

背景

我继承了一个非常古老(12 年)的 .NET 网站 项目,该项目使用 Web 表单架构。

这是一个非常大的代码库,当 运行 在网络服务器上时,它依赖于一个非常大的本地图像资源文件夹。我在远程工作,被告知图像文件夹不会添加到源代码管理;但是,我可以通过网络文件夹访问它(如果连接到 VPN)。

如果我对任何图像进行硬编码以使用网络路径,它们都可以正常工作,但这显然不是一个好的解决方案,因为有成千上万的图像。

问题

是否可以拦截任何传入的图像文件请求,如果找不到本地图像文件夹(即在我的机器上开发),则使用网络路径 URI 来获取图像?如果是这样,正确的做法是什么?

我试过的

我尝试在 global.asaxApplication_BeginRequest 方法中拦截请求(我很惊讶地发现在这样一个老项目中)但这显然不会拦截图像请求。我的想法是,我可以在那里重新构造 URL,然后在生产中注释掉该代码,但这似乎也不是一个很好的解决方案。

提前致谢。

如果是 WebForms,那么您当然可以使用 HTTP 处理程序来实现此目的。

public class ImageHandler : IHttpHandler
{        
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public void ProcessRequest(HttpContext context)
    {
        // Handle your request here, using 
        // context.Request and System.IO 
        // to serve the image from network
    }
}

然后,您需要像这样在 Web.Config 中注册和配置处理程序,对于 IIS6:

<system.web>
    <httpHandlers>
        <add verb="*" path="*.jpg,*.png" type="Namespace.ImageHandler, AssemblyName" validate="false" />
    </httpHandlers>
</system.web>

或 IIS7:

<system.webServer>
    <handlers>
        <add name="JpgImage" verb="*" path="*.jpg" type="Namespace.ImageHandler, AssemblyName" resourceType="File" />
        <add name="PngImage" verb="*" path="*.png" type="Namespace.ImageHandler, AssemblyName" resourceType="File" />
    </handlers>
</system.webServer>