2013-02-17 72 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