【问题标题】:FileContentResult - prevent browser caching imageFileContentResult - 防止浏览器缓存图像
【发布时间】:2011-11-07 14:40:57
【问题描述】:

我正在从对操作方法的调用中返回一个图像 (png),并且我想停止浏览器缓存该图像。

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

我已经尝试了所有常见的方法,将一组不同的标头附加到文件输出响应中,但它们似乎都不适合我。

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

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

每次请求相同的 URL 时,服务器都没有命中。

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

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

    • It should be image.src = baseUrl + params + "&ts=" + new Date().getTime(); 如果 & 被省略,时间值将附加到查询字符串中的最后一个值。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢亚当。我正在使用您所建议的 OutputCache 属性,但是在图像 src 中调用相同的操作方法仍然没有到达服务器。第一个命中服务器很好,它只是第一个之后的任何请求。
    • 您的浏览器设置如何?哪个浏览器? IE?您是设置为在每个请求上获取新文件还是“自动”获取新文件。 IE有时很挑剔。加载傻瓜提琴手,看看请求是否出来了。如果不是 - 那么它的 IE(或任何浏览器)。还要检查应在请求中发送的无缓存标头。你用的是什么版本的浏览器?
    • 我正在FF6中进行测试。我会检查你提到的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多