在MVC3中缓存FileResult操作

sli*_*yr4 5 asp.net asp.net-mvc asp.net-mvc-3

我有一个返回FileResult(这是一个png图像)的动作.我非常希望浏览器缓存结果,因为对于给定的请求uri它不会改变.

我使用路由来使uri看起来像这样 -

http://localhost:6094/Map/Tiles/1.0.0/none/2/5/5.png 
Run Code Online (Sandbox Code Playgroud)

在动作方法中,我打电话: -

Response.Cache.SetCacheability(HttpCacheability.Public);
Run Code Online (Sandbox Code Playgroud)

在Fiddler,我可以看到答案有: -

Cache-control: public
Run Code Online (Sandbox Code Playgroud)

头.然而,对相同地图图块的后续请求如下所示: -

    GET http://localhost:6094/Map/Tiles/1.0.0/none/2/5/5.png HTTP/1.1
Host: localhost:6094
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.34 Safari/536.11
Accept: */*
Referer: http://localhost:6094/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Run Code Online (Sandbox Code Playgroud)

因此导致200响应和数据传输.

知道为什么Chrome不打算缓存我的数据吗?

谢谢

Ada*_*SFT 7

您是否尝试过OutputCache属性?这应该适合您,但指定它的生命周期.

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

[OutputCache(Duration=84600)]
Run Code Online (Sandbox Code Playgroud)

  • @SergeShultz:[OutputCache(Duration = 84600,Location = OutputCacheLocation.Server)]只会在服务器上缓存.但是,Location的默认值是OutputCacheLocation.Any,这意味着输出将缓存在服务器上,但Cache-Control标头也将设置为public,因此响应可以缓存在代理和浏览器上. (4认同)