所以我遇到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
任何帮助都将不胜感激。
答案 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);
}
}