Asp.net mvc 未找到图像时显示默认图像

Asp.net mvc 未找到图像时显示默认图像,asp.net-mvc,iis,asp.net-mvc-4,url-rewriting,iis-7.5,Asp.net Mvc,Iis,Asp.net Mvc 4,Url Rewriting,Iis 7.5,我有一个MVC4应用程序在IIS7.5上运行。该应用程序生成一个产品目录,其中包含分配给每个产品的图像 有时一些产品没有任何图像分配给他们,在这种情况下,我想包括一个占位符图像,而不是什么都没有。直到运行时和404出现时,映像才不存在 我正在考虑在IIS中设置url重写规则,如果从符合条件的图像返回404,则会显示默认图像。关于这一点,我有几个问题: 可能吗?如果可能,如何实现? 这样做是否存在性能问题? 有没有其他方法可以实现上述目标?好问题。我的第一个想法是找出服务器上是否存在该文件。我假设

我有一个MVC4应用程序在IIS7.5上运行。该应用程序生成一个产品目录,其中包含分配给每个产品的图像

有时一些产品没有任何图像分配给他们,在这种情况下,我想包括一个占位符图像,而不是什么都没有。直到运行时和404出现时,映像才不存在

我正在考虑在IIS中设置url重写规则,如果从符合条件的图像返回404,则会显示默认图像。关于这一点,我有几个问题:

可能吗?如果可能,如何实现? 这样做是否存在性能问题?
有没有其他方法可以实现上述目标?

好问题。我的第一个想法是找出服务器上是否存在该文件。我假设这不像为图像创建一个数据库列那么容易

也许您会遇到这样一种情况,即查看一个文件夹,其中的图像将与productId同名(或类似名称)。您可以使用System.IO.FileExists()来确定文件是否存在。这可能效率不高

另一个想法可能是查看文件所在的目录,并将它们放入某种字典中。您可以将其存储在应用程序缓存中。可以在渲染图像之前查看缓存。当然,您需要一种刷新该词典的方法(即为该产品上传产品图像)

我不知道重写是怎么回事。我想你可以在你这方面做点工作——为了避免那样做

<img src="(@Dictionary[key] != null ? Model.Image : Model.EmptyImage)" />

如果您真的想用IIS处理此问题,可以使用自定义404错误页配置。
我不知道这个解决方案的性能如何,但我看不出它会成为问题的原因

  • 设置一个包含所有图像的
    虚拟目录
    (我们称之为
    myu-images

  • 在虚拟目录根目录中添加您的通用图片(因此可以使用url
    http://yourwebsite.com/my_images/generic.jpg

  • 在IIS管理器中选择您的
    my_images
    虚拟目录,并在
    错误页面下编辑404自定义错误页面,如下所示:

  • 当您试图访问虚拟目录下的资源时触发404错误时,您现在应该有您的通用图片了
    my_images

    限制:

    自定义404错误页面不限于图像格式,因此在虚拟目录下触发404错误的任何请求都将呈现通用图像。
    如果要使用
    localhost
    进行测试,需要单击
    编辑功能设置…
    并将值更改为
    自定义错误页