在MVC 3中忽略OutputCache属性

时间:2012-02-09 19:59:47

标签: asp.net-mvc-3 caching attributes

所以我遇到IE 7能够从MVC 3内置的SSL站点下载文件的问题。对于IE 7能够从SSL站点保存文件,它必须是可缓存的。

该方法的代码是:

[OutputCache(Location = OutputCacheLocation.ServerAndClient, Duration = 20, VaryByParam = "none", NoStore = true )]
public override FileContentResult Export(int? id, string extra)
{
...
return new FileContentResult(byte[], mimetype);
}

这适用于IE9,Chrome,Safari和Firefox。 我已经尝试过VaryByParam,Duration和NoStore的各种设置。当我更改任何这些设置时,响应标头似乎永远不会改变。

  

缓存控制:无缓存,无存储,必须重新验证

     

内容处置:附件;文件名= PersonalInfo-02092012.xlsx

     

的Content-Length:11933

     

内容类型:应用/ vnd.openxmlformats-officedocument.spreadsheetml.sheet

     

日期:2012年2月9日星期四18:16:35 GMT

     

过期:-1

     

杂注:无缓存

     

服务器:IIS / 7.5

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

我自己解决了这个问题,但是我把它留在了那里,以便它可能对其他人有用。

问题是自定义ActionFilterAttribute是手动设置缓存信息,因此我在Action上设置的缓存被忽略。

为了简洁起见,有问题的属性被修剪:

public class CustomAttributeName: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetNoStore();

        base.OnActionExecuting(filterContext);
    }
}