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,但我的行动反应没有。
任何人都可以帮忙解决为什么这可能不会在浏览器中缓存?
感谢您的帮助..
答案 0 :(得分:2)
尝试删除:NoStore = true(或设置NoStore = false),它将起作用:)