FileContentResult - 阻止浏览器缓存图像

时间:2011-08-31 13:08:52

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

我正在从调用动作方法返回一个图像(png),我想停止浏览器缓存图像。

return File(reply, "image/png", "{0}_Graph".FormatWith(ciName));

我已经尝试了所有常见的事情,在文件输出响应中添加了一组不同的标题,但似乎没有一个对我有效。

基本上我的action方法返回一个在服务器上生成的图形,可能会不时出现。我在客户端使用Javascripts Image对象,并将其src设置为我的操作方法。

var image = new Image();
image.src = baseUrl + params;

每次请求相同的URL时,服务器都不会被命中。

我可以在查询字符串中附加一个随机数等,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:1)

您可以设置适当的HTTP标头以防止缓存(我不知道如何在ASP.NET中执行此操作,但我想它会像HTTP.Response.setHeader("foo", "bar")

"Pragma-directive: no-cache"
"Cache-directive: no-cache"
"Cache-control: no-cache"
"Pragma: no-cache"
"Expires: 0"

如果您不喜欢随机数解决方案,请使用当前时间戳:

image.src = baseUrl + params + '&t=' + new Date().getTime();

答案 1 :(得分:1)

由于这是MVC,因此请使用MVC OutputCache属性。请参阅我的回复: Disable browser cache for entire ASP.NET website

还要记得在尝试之前清除缓存。如果它已经缓存,则结果可能不一致。