2009-04-28 28 views
7

目前我有以下行動,從我的數據庫返回的文件(圖片,PDF的,等等):如何緩存FileContentResult以獲得性能?

// 
    // GET: /FileManager/GetFile/ID 
    [OutputCache(Duration = 600, VaryByParam = "ID")] 
    public ActionResult GetFile(int ID) 
    { 
     FileService svc = new FileService(new SqlFileRepository(base.ConnectionString)); 

     KsisOnline.Data.File result = svc.GetFileByID(ID); 

     return File(result.Data, result.MimeType, result.UploadFileName); 
    } 

我使用OutputCache屬性,但我不知道我是否正確或使用它如何爲此優化它。因爲代碼的立場,我似乎得到緩存功能在Firefox(3),但不是IE(7)。出於某種原因,IE每次都從數據庫請求映像(這顯然是殺手級的不好),我不知道如何解決它。確定IE不支持標準,但也許我仍然沒有遵循一些首選的緩存約定。我真的很感謝一些幫助,所以我得到了最小的數據庫命中和緩存支持跨瀏覽器。

編輯: 要查看上面的代碼中的動作,或者自己與瀏覽器/工具型材它,請參閱this link

+0

可能重複【如何與FileResult在返回304個狀態ASP.NET MVC RC1](http://stackoverflow.com/questions/602104/how-return-304-status-with-fileresult-in-asp-net-mvc-rc1) – 2012-12-22 23:52:22

回答

2

您需要使用Fiddler來查看IE和您的應用程序發送的HTTP標頭與Firefox的標頭不同。你必須讓瀏覽器發送If-Modified-Since標題(也可能是ETag)標題,你的應用程序應該以HTTP 302狀態響應。

+0

我有點兒希望能得到幫助與OutputCacheAttribute細節第一。但是你的建議在優化HTTP頭文件中是非常寶貴的。 thanx – 2009-04-28 16:48:19

4

嘗試使用ServerAndClient位置:

[的OutputCache(持續時間= 600的VaryByParam = 「ID」,位置= OutputCacheLocation.ServerAndClient)]的

0
ControllerContext.HttpContext.Response.ClearHeaders()