我在iis 7.5上运行了一个mvc 4应用程序。该应用程序生成一个产品目录,其中包含分配给每个产品的图像。
有时某些产品没有分配任何图像,在这种情况下我想要包含占位符图像而不是任何内容。直到运行时才发生404,图像不存在。
我正在考虑在IIS中设置url重写规则,如果从符合条件的图像返回404,则会显示默认图像。我对此有几个问题:
有可能,如果可能,怎么样? 这样做会有性能问题吗? 有没有其他方法可以实现上述目标?
答案 0 :(得分:1)
好问题。我的第一个想法是找出服务器上是否存在该文件。我假设这不像拥有图像的数据库列那么容易。
也许您有一个场景,您可以在其中查看图像与productId(或类似名称)同名的文件夹。您可以使用System.IO.FileExists()来查明文件是否存在。这可能不是非常有效。
另一个想法可能是查看文件所在的目录并将它们放在某种字典中。您可以将其存储在应用程序缓存中。您可以在渲染图像之前查看缓存。当然,您希望想要一种刷新该词典的方法(即为该产品上传产品图像)
我不知道重写是如何工作的。我认为你可以做一些工作 - 为了避免这样做。
<img src="(@Dictionary[key] != null ? Model.Image : Model.EmptyImage)" />
答案 1 :(得分:0)
如果您真的想通过IIS处理此问题,可以使用自定义404错误页面配置 我不知道这个解决方案的性能,但我没有看到它成为问题的原因。
Virtual Directory
(让我们称之为my_images
)。http://yourwebsite.com/my_images/generic.jpg
获取此图片。)在IIS管理器中选择您的my_images
虚拟目录,然后在Error Pages
下编辑404自定义错误页面,如下所示:
当您尝试访问虚拟目录my_images
下的资源时,如果触发404错误,您应该拥有通用图片。
<强>限制:强>
自定义404错误页面不限于图像格式,因此任何触发虚拟目录下404错误的请求都将呈现通用图像。
如果您想使用localhost
进行测试,则需要点击Edit Feature Settings...
并将值更改为Custom error pages
: