我们使用Windows Server 2008 R2 Enterprise和IIS7.5.7600.16385, 我在服务器上部署了一个简单的Web(asp.net mvc,c#,。net framework 4.5.1)。 像下面这样的控制器,* .cshtml只输出一个日期时间:
public class DetailController : Controller
{
[OutputCache(Duration = 300, VaryByParam = "id")]
public ActionResult Index(int id)
{
return View();
}
}
当我第一次请求网址http://localhost:80/Detail/Index?id=3时,回复是正确的:
Cache-Control:public, max-age=300
Date:Mon, 24 Oct 2016 12:11:59 GMT
Expires:Mon, 24 Oct 2016 12:16:51 GMT
Last-Modified:Mon, 24 Oct 2016 12:11:51 GMT
但是,当我再次请求url(ctrl + f5)时,max-age不正确(然后响应来自服务器缓存):
Cache-Control:public, max-age=63612908450
Date:Mon, 24 Oct 2016 12:16:34 GMT
Expires:Mon, 24 Oct 2016 12:20:50 GMT
Last-Modified:Mon, 24 Oct 2016 12:15:50 GMT
我不知道为什么max-age这么大,以及它是如何生成的,它会在输出缓存过期时重新转换(ctrl + f5)。 在我的生产环境中,不正确的max-age导致url链接点击从浏览器的磁盘缓存中读取内容。
任何人都知道如何以及如何修复它?
答案 0 :(得分:5)
这是一个已知问题,KB15.264随附了一个针对.NET 4.6.2的错误。
有关其他详细信息,请参阅此处:https://github.com/Microsoft/dotnet/issues/330
这将在.NET 4.6.3中修复。我目前还不知道是否会提前为4.6.2提供修复。
目前唯一已知的解决方法是尽可能降级和删除KB151864。
注意:该错误仅影响" max-age"的编译。缓存响应的Cache-Control标头中的属性。实际的缓存机制和生命周期到期正在发挥作用。
答案 1 :(得分:0)
我刚刚与Microsoft支持团队进行了交谈,这就是他们回复我的内容:
建议的解决方法是将框架工作从4.6.2降级为 4.6.1卸载更新KB31511864。
转到控制台 - >程序 - >程序和功能 - >已安装的更新。
并删除KB3151864
,这将解决此问题。