如何在没有Vary的情况下使用OutputCacheLocation.ServerAndClient:* HTTP标头

时间:2016-01-25 14:20:09

标签: c# asp.net-mvc caching asp.net-mvc-5

我试图在MVC视图上使用OutputCache进行服务器和客户端缓存,但是将Location设置为ServerAndClient会强制设置HTTP标头Vary: *,这很大程度上违背了客户端缓存的目的(它告诉了浏览器每次使用资源时检查新鲜度。)

我希望浏览器将文件缓存24小时,如果我更改了添加到查询字符串的LastModifield参数,则只发出另一个请求。如果我只有Client作为位置,但是我也希望服务器缓存该文件,以便当另一个用户请求相同的资源时,它不需要重新生成它。

该资源基于一个很少更新的数据库(可能每月一次或两次,我知道它何时发生了变化),资源可能会受到很大的影响,所以我不想生成它所有的时间甚至处理修改后的条件请求。

我的OutputCache属性是:

[OutputCache(Location = OutputCacheLocation.ServerAndClient, Duration = 86400, VaryByParam = "LastModified")]

我已经尝试扩展OutputCacheAttribute类并覆盖所有的On *方法并删除Vary http标头,但是在调用所有这些方法之后,似乎没有添加Vary标头。

1 个答案:

答案 0 :(得分:1)

Response.Cache.SetOmitVaryStar(true);