我有一個actionmethod返回一個文件,只有一個參數(一個ID)。ASP.NET MVC:使動作的瀏覽器緩存圖像
例如
public ActionResult Icon(long id)
{
return File(Server.MapPath("~/Content/Images/image" + id + ".png"), "image/png");
}
我希望瀏覽器在第一次訪問它時自動緩存該映像,以便下次不必下載所有數據。
我已經嘗試使用OutputCacheAttribute之類的東西並在響應中手動設置標題。即:
[OutputCache(Duration = 360000)]
或
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(Cache.NoAbsoluteExpiration);
,但圖像仍然加載每次我打了F5在瀏覽器上(我想它在Chrome和IE)的時間。 (我知道它每次都被加載,因爲如果我更改圖像,它也會在瀏覽器中更改)。
我看到HTTP響應具有一定的頭,顯然應該工作:
緩存控制:公衆,最大年齡= 360000
的Content-Length:39317
內容 - 類型:image/PNG
日期:星期二,2012年1月31日23時二十分57秒GMT
過期:孫老師,2月5日2012 GMT 3時20分56秒
的Last-Modified:星期二,2012年1月31 23時20分56秒GMT
但請求頭有這樣的:
雜注:無緩存
有關如何做到這一點的任何想法?
非常感謝
非常感謝,正是我一直在尋找。它似乎有點複雜,但不應該有一個「更標準」的方式來使用ASP.NET MVC?就像一個可以接收響應和最新修改並相應處理的方法一樣? (這就是我會做的,但我不認爲我是第一個想到這個問題的人)。 – willvv 2012-02-01 00:21:48
我一直使用自己的HttpHandler - 所以不需要使用MVC,但並不意味着可以這樣做 - 只是不確定哪種方式更好?我可以推薦看一下http://imageresizing.net/,這是一個很棒的小組件,可以爲你處理所有事情和更多! – brodie 2012-02-01 00:37:04
問題是我的圖像存儲在數據庫中,可以在外部進行修改,因此HTTP處理程序看起來不是一個選項。 – willvv 2012-02-01 02:41:00