在ASP.NET MVC中从相同的路由URL路径提供图像

Joe*_*nez 6 asp.net-mvc routing

这就是我想做的事情.我有一些内容,我写的是一个观点.此内容具有与文档相关的图像引用.例如,如果我正在查看以下网址:

http://localhost/article/8AB98/
Run Code Online (Sandbox Code Playgroud)

内容可能具有以下形式的图像:

<img src="myimage.png" />
Run Code Online (Sandbox Code Playgroud)

这显然会导致浏览器在以下URL查询图像:

http://localhost/article/8AB98/myimage.png
Run Code Online (Sandbox Code Playgroud)

但是,由于mvc路由,将无法找到此图像.您是否知道一种简单的方法可以使该URL将正确的图像返回给浏览器?

请注意:实际上重要的是标记保持原始状态不变...这意味着以某种方式重写图像网址,以便它们指向当前视图URL之外的另一个文件夹,遗憾的是不可能.

谢谢!!

Haa*_*ked 6

您可以使用Url.Content()方法.

<img src="<%= Url.Content("~/images/myimage.png") %>" />
Run Code Online (Sandbox Code Playgroud)

这将解析应用程序根目录中的url.


Jam*_*nes 5

我假设当你说"实际上重要的是标记与原始标记保持不变"时,你的意思是

<img src="myimage.png" />
Run Code Online (Sandbox Code Playgroud)

是什么必须呈现给浏览器,所以你需要欺骗Web服务器采取的请求URL

http://localhost/article/8AB98/myimage.png
Run Code Online (Sandbox Code Playgroud)

并仅使用该信息查找正确的图像,无论您将其存储在何处,并将其返回到浏览器.

我想到了两个选项,但很难知道要推荐哪个,因为你还没有说出存储图像的位置.

选项1 - Url重写器

购买ISAPI_Rewrite的副本,并重写所有符合上述条件的网址,以便在任何地方获取图像.有关ISAPI_Rewrite的更多信息,请点击此处.

选项2 - 自定义HttpHandler

您可以编写映射到解析请求URL的所有PNG文件请求的HttpHandler,并执行查找映像所需的操作,然后将其返回到响应流.这样做的缺点是你必须告诉IIS将所有PNG请求映射到aspnet_isapi.dll,这可能是一个性能无赖.

我仍然不确定我是否正确理解你的问题,但我希望这会有所帮助.祝好运.