2013-02-17 113 views
2

我有一个mvc 4应用程序运行在iis 7.5上。该应用程序会生成一个产品目录,并为每个产品分配图像。当图像未找到显示默认图像

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

我想在IIS中设置一个url重写规则,如果从匹配条件的图像返回404,将显示默认图像。我对此有几个问题:

是否有可能,如果有,如何? 这样做是否存在性能问题? 有没有其他办法可以达到上述目的?

回答

1

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

也许你有一个场景,你可以在这里看到一个文件夹,其中的图像与productId(或类似的东西)名称相同。你可以使用System.IO.FileExists()来查明文件是否在那里。这可能不是非常有效。

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

我不知道如何重写将工作。我想你可以在你的目的上做一些小小的工作 - 以避免这样做。

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

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

  1. 设置一个包含所有图像的Virtual Directory(我们称之为my_images)。
  2. 在虚拟目录根目录中添加您的通用图片(因此此图片可使用网址http://yourwebsite.com/my_images/generic.jpg)。
  3. 在IIS管理器中选择您my_images虚拟目录下Error Pages编辑404自定义错误页如下:

    404

您现在应该有你的普通图片时被触发404错误时试图访问您的虚拟目录my_images下的资源。

限制:

自定义404错误页面不局限于图像格式,使您的虚拟目录下触发404错误任何请求都将呈现一般图像。
如果要使用localhost测试,您需要点击Edit Feature Settings...和值更改为Custom error pages

features