IIS7.5 max-age问题(asp.net mvc输出缓存)

时间:2016-10-24 12:27:27

标签: asp.net-mvc outputcache

我们使用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链接点击从浏览器的磁盘缓存中读取内容。

任何人都知道如何以及如何修复它?

2 个答案:

答案 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,这将解决此问题。