MVC 3输出缓存问题

时间:2011-02-16 23:15:20

标签: asp.net-mvc caching asp.net-mvc-3

ASP.Net MVC 3 RTM。我试图在一个动作中使用OutputCache属性,但似乎没有工作。这是Http请求和响应。

Request URL:http://localhost/MyApp/Employee.mvc/GetImage?userId=myUserId
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:ASP.NET_SessionId=sessionIdStuff
Host:localhost
Pragma:no-cache
Referer:http://localhost/MyApp/Employee/Review/1/Index
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
     

AppleWebKit / 534.13(KHTML,与Gecko一样)   Chrome / 9.0.597.98 Safari / 534.13       查询字符串参数       用户名:MYUSER       响应标题       Cache-Control:private,no-store,max-age = 3484

Content-Length:1428
Content-Type:image/jpeg
Date:Wed, 16 Feb 2011 22:59:14 GMT
Expires:Wed, 16 Feb 2011 23:57:19 GMT

Last-Modified:Wed, 16 Feb 2011 22:57:19 GMT
Server:Microsoft-IIS/5.1
Vary:*
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

这是控制器:

        [HttpGet, OutputCache(Location= OutputCacheLocation.Client, VaryByParam="userId", Duration=3600, NoStore=true)]
        public FileContentResult GetImage(string userId)
        {
            byte[] result;

            using (var client = new WebClient())
            {
                client.Credentials = CredentialCache.DefaultCredentials;
                result = client.DownloadData(string.Format(IntranetUrl, userId));
            }

            return File(result, "image/jpeg");
        }

和我的观点:

<img alt="Employee Picture" src='@Url.Action("GetImage", "Employee", new { userId = Model.UserId, area=""})' width="75px" height="100px" />

我尝试与其他正在缓存的静态图像进行比较,以及这些行的唯一区别:

  

缓存控制:私有,无商店,   最大年龄= 3484

这包含在我的操作中,但不包含在静态图像中。此外,静态图像有一个ETag,但我的行动反应没有。

任何人都可以帮忙解决为什么这可能不会在浏览器中缓存?

感谢您的帮助..

1 个答案:

答案 0 :(得分:2)

尝试删除:NoStore = true(或设置NoStore = false),它将起作用:)