【问题标题】:when image not found show default image当找不到图像时显示默认图像
【发布时间】:2013-02-02 07:00:46
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    我不知道重写将如何工作。我认为您可以在自己的目标上做一些工作——以避免这样做。

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

    【讨论】:

      【解决方案2】:

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

      1. 设置一个包含所有图像的Virtual Directory(我们称之为my_images)。

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

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

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

      限制:

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

      【讨论】:

        猜你喜欢
        • 2019-06-13
        • 2023-03-06
        • 2023-02-05
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-12
        • 2012-07-23
        相关资源
        最近更新 更多