使用 .NET(网站项目),我如何拦截所有传入的图像请求并更改它们的请求路径?
Using .NET (website project), how can I intercept all incoming image requests and alter their request path?
感谢观看。
背景
我继承了一个非常古老(12 年)的 .NET 网站 项目,该项目使用 Web 表单架构。
这是一个非常大的代码库,当 运行 在网络服务器上时,它依赖于一个非常大的本地图像资源文件夹。我在远程工作,被告知图像文件夹不会添加到源代码管理;但是,我可以通过网络文件夹访问它(如果连接到 VPN)。
如果我对任何图像进行硬编码以使用网络路径,它们都可以正常工作,但这显然不是一个好的解决方案,因为有成千上万的图像。
问题
是否可以拦截任何传入的图像文件请求,如果找不到本地图像文件夹(即在我的机器上开发),则使用网络路径 URI 来获取图像?如果是这样,正确的做法是什么?
我试过的
我尝试在 global.asax
的 Application_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>
感谢观看。
背景
我继承了一个非常古老(12 年)的 .NET 网站 项目,该项目使用 Web 表单架构。
这是一个非常大的代码库,当 运行 在网络服务器上时,它依赖于一个非常大的本地图像资源文件夹。我在远程工作,被告知图像文件夹不会添加到源代码管理;但是,我可以通过网络文件夹访问它(如果连接到 VPN)。
如果我对任何图像进行硬编码以使用网络路径,它们都可以正常工作,但这显然不是一个好的解决方案,因为有成千上万的图像。
问题
是否可以拦截任何传入的图像文件请求,如果找不到本地图像文件夹(即在我的机器上开发),则使用网络路径 URI 来获取图像?如果是这样,正确的做法是什么?
我试过的
我尝试在 global.asax
的 Application_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>