未找到图像时显示默认图像

时间:2013-02-17 21:29:26

标签: asp.net-mvc iis asp.net-mvc-4 url-rewriting iis-7.5

我在iis 7.5上运行了一个mvc 4应用程序。该应用程序生成一个产品目录,其中包含分配给每个产品的图像。

有时某些产品没有分配任何图像,在这种情况下我想要包含占位符图像而不是任何内容。直到运行时才发生404,图像不存在。

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

有可能,如果可能,怎么样? 这样做会有性能问题吗? 有没有其他方法可以实现上述目标?

2 个答案:

答案 0 :(得分:1)

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

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

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

我不知道重写是如何工作的。我认为你可以做一些工作 - 为了避免这样做。

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

答案 1 :(得分:0)

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

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

    404

  4. 当您尝试访问虚拟目录my_images下的资源时,如果触发404错误,您应该拥有通用图片。

    <强>限制:

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

    features