我如何缓存FileContentResult的性能?

Mat*_*caj 7 asp.net-mvc firefox internet-explorer caching

目前我有以下操作从我的数据库返回文件(图像,PDF等):

    //
    // 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);
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用该OutputCache属性,但我不知道我是否正确使用它或如何为此目的优化它.

正如代码所示,我似乎在Firefox(3)中获得了缓存功能,但不是IE(7).出于某种原因,IE每次都要从DB请求图像(这显然是杀手很糟糕),我不知道如何修复它.当然IE不能正确支持标准,但我可能仍然没有遵循一些首选的缓存约定.我真的很感激一些帮助,所以我得到最小的数据库命中和缓存支持跨浏览器.

编辑: 要查看上面的代码或使用浏览器/工具自行配置,请参阅此链接.

Fel*_*oto 5

尝试使用 ServerAndClient 位置:

[OutputCache(持续时间=600,VaryByParam="ID",位置=OutputCacheLocation.ServerAndClient)]


Ant*_*lev 2

您需要使用Fiddler来查看 IE 发送的 HTTP 标头以及您的应用程序与 Firefox 的应用程序有何不同。您必须让浏览器发送If-Modified-Since标头(可能还有ETag)标头,并且您的应用程序应该以 HTTP 302 状态进行响应。

  • @Anton你不是说“用HTTP *304*状态响应”吗?302是一个重定向 (2认同)