2010-09-24 55 views
0

我想緩存在MVC2控制器動作像這樣的輸出:MVC的OutputCache問題

[OutputCache(Duration = 600, VaryByParam = "id", Location=System.Web.UI.OutputCacheLocation.Server)] 
     public FileContentResult GetImage(int id) { 
} 

當用戶上傳一個新的形象,爲自己的圖標我用下面的行緩存失效:

HttpResponse.RemoveOutputCacheItem("/MyPage/GetImage/" + u.UserID.ToString()); 

然而,這似乎並沒有工作,我想不通爲什麼

+0

您的代碼看起來正確。你可以驗證'u.UserID.ToString()'返回正確的ID嗎? – Buildstarted 2010-09-24 13:51:08

+0

是的,它肯定會返回正確的ID – Gazeth 2010-09-28 08:38:44

回答

0

我不知道這一點,但是,即使您使用「位置=服務器」它可能仍然緩存在我看來,在cli ent(就好像根本沒有outputCache屬性一樣),除非還有「NoStore = true」。

由於這樣的問題可能是客戶端緩存的結果。

您可以通過使用調試工具(如fiddler)或內置於瀏覽器中的調試工具檢查客戶端請求來檢查是否屬於這種情況。

+0

要驗證這一點,請使用瀏覽器的調試工具網絡(net)視圖並查找GetImage調用的304狀態。 304意味着瀏覽器不會回到服務器。爲了克服這個問題,你可以添加一個時間戳作爲一個額外的參數。 – 2012-03-21 19:36:13

+0

@Steve儘管添加一個額外的參數肯定會強制直接請求圖像,但即使圖像未被更改也是如此,這與他在第一個位置放置OutputCache屬性的原因相反 – 2012-03-21 19:45:48

+1

我瞭解您的邏輯,並且你是正確的,但是當瀏覽器發出請求時服務器可能會使用它的緩存機制。我猜 - 現在不能測試它。 – 2012-03-21 20:25:58