asp.net-mvc – 使用OutputCacheAttribute时忽略SetLastModified

我有一个ASP.NET MVC方法(在.NET 4.0上的v3.0)设置如下:

[OutputCache(Duration = 31536000, Location = OutputCacheLocation.Any)]
public virtual ActionResult Item()
{
    this.Response.Cache.SetLastModified(new DateTime(2011, 01, 01));
    return this.Content("hello world", "text/plain");
}

我希望这会返回Last-Modified标头设置为Mon,07 Feb 2011 00:00:00 GMT指定,但实际上它将作为输出首次缓存在输出缓存中的日期返回(即自IIS重置后第一次调用该方法.

如果我注释掉[OutputCache]属性以便不进行输出缓存,则Last-Modified标头会按预期返回,因此看起来输出缓存基础结构中的某些东西选择忽略我的指定值.

知道为什么会这样做吗?有没有办法让它使用我指定的值作为Last-Modified日期?

最佳答案 好吧,我从来没有弄清楚这种情况发生的原因,但它看起来像是[OutputCache]属性使用的ASP.NET页面缓存基础结构中的某个地方的错误.

我最后编写了一个自定义[HttpCache]属性,它具有相同的公共接口,但它直接调用Response.Cache对象上的相应缓存方法,而不是委托给ASP.NET页面缓存基础结构.

这很好.遗憾的是内置属性没有.

点赞