2009-04-28 3 views
7

現在、私は私のDBからファイル(画像、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は毎回DBからイメージを要求しています(これは明らかに悪名高いものです)、それを修正する方法はわかりません。確かIEは標準を適切にサポートしていませんが、おそらく私はまだいくつかの推奨されているキャッシュ規則に従っていません。私は本当にこれでいくつかの助けに感謝したいので、私は最小DBのヒットとキャッシュクロスブラウザをサポートしています。

EDIT: アクションで上記のコードを参照したり、ブラウザ/ツールを使用してそれを自分のプロファイルに、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) –

答えて

2

Fiddlerを使用する必要があります。IEとアプリケーションがどのHTTPヘッダーをどのように送信するのかは、Firefoxのものとどのように異なるのかを確認する必要があります。あなたが持っている必要があるのは、ブラウザにIf-Modified-Sinceヘッダー(おそらくETag)ヘッダを送信させ、あなたのアプリはHTTP 302ステータスで応答する必要があります。

+0

私はちょっと助けを得ることを望んでいたOutputCacheAttributeの詳細は第1回です。 HTTPヘッダーを最適化する上で非常に貴重です。 thanx –

+2

@Anton「HTTP * 304 *ステータスで応答する」という意味ではありませんか? 302はリダイレクトです –

4

てみ使用ServerAndClient場所:

[OutputCache(期間= 600、VaryByParam = "ID"、場所= OutputCacheLocation.ServerAndClient)]の

0
ControllerContext.HttpContext.Response.ClearHeaders() 
関連する問題