asp.net-mvc-4 – 一旦SetCacheability方法设置了,就可以删除一
我有一个返回FileStreamResult的MVC4 GET动作方法.存在一种要求,即仅使用SSL并且不允许缓存所提供的文档,因此使用SSL,并且我还使用具有以下属性的OutputCache过滤器:
[OutputCache(NoStore = true,Duration = 0,VaryByParam = "None",Location = OutputCacheLocation.None)] 这符合预期,并产生以下响应标头: Cache-Control: no-cache,no-store Expires: -1 Pragma: no-cache 一切都很好,直到被要求也支持IE8,并且这里的许多人也遇到了文件,不会同时下载no-cache set和SSL. IE8及以下的解释是添加一些实际上不可行的注册表设置,或者删除违反基本要求的无缓存标头. 我尝试使用Fiddler和IE8并且能够下载文件,如果我刚删除了pragma:no-cache标头但保留了Cache-Control.这似乎没有在我的临时Internet文件中留下文档的副本,但我可能需要对此进行更多测试. 考虑到这些信息,我认为使用操作过滤器删除编译指示可能是一项简单的任务,但似乎无论我做什么,我无法更改OutputCache将要设置的任何内容.我甚至删除了OutputCache属性并使用了: Response.Cache.SetCacheability(HttpCacheability.NoCache) 单独使用此方法可确保我获得与以前相同的缓存设置,但不会在此方法调用时设置它们.这只是设置缓存策略,该策略在响应管道中的某个点应用,但我不知道在哪里. 有没有人知道是否有一种方法可以连接到响应管道以在写入时更改缓存头? 编辑 编辑 解决方法
我正在解决同样的问题,并遇到了删除pragma标头的相同问题.当.NET呈现Page对象时,它会输出缓存头.缓存处理由HttpModule控制.我已经尝试了几种方法来删除pragma标头,但无济于事.
我还没有尝试过一种看似可能有效的方法,但看起来像PITA的方法是通过Response.Filter = new MyCustomFilter(…)在Response输出流上实现一个过滤器. 在此之前,我尝试检查各个位置的标头,但输出缓存处理尚未执行,并且pragma标头不存在,因此无法删除.值得注意的是,HttpApplication事件PreSendRequestHeaders不起作用. 其他一些选项包括实现您自己的OutputCache模块而不是使用内置框架版本,或以某种方式覆盖呈现pragma标头的System.Web.HttpCachePolicy类. pragma标头作为HttpCacheability.NoCache选项的一部分呈现: if (httpCacheability == HttpCacheability.NoCache || httpCacheability == HttpCacheability.Server) { if (HttpCachePolicy.s_headerPragmaNoCache == null) HttpCachePolicy.s_headerPragmaNoCache = new HttpResponseHeader(4,"no-cache"); this._headerPragma = HttpCachePolicy.s_headerPragmaNoCache; if (this._allowInHistory != 1) { if (HttpCachePolicy.s_headerExpiresMinus1 == null) HttpCachePolicy.s_headerExpiresMinus1 = new HttpResponseHeader(18,"-1"); this._headerExpires = HttpCachePolicy.s_headerExpiresMinus1; } } 我发现的唯一实用选项是将缓存控制设置为私有,并为URL设置一个短暂的过期.它没有解决两端的根本原因,但它最终会产生几乎相同的预期效果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何使用ASP.NET MVC Web API OData链接到Razor中的OData集
- 单元测试 – 使用Owin为MVC 5控制器创建单元测试
- asp.net – Web Api – 如何直接从OnActionExecuting过滤器
- asp.net – 无法从[服务器]下载[文件]无法打开此Internet站
- Azure发布版本未显示捆绑包
- asp.net – Telerik RadDatePicker在2030年之后没有收到日期
- asp.net – IIS配置错误 – 此配置部分不能用于此路径
- asp.net-mvc – Asp.net Web api异常仅在IIS部署之后:名为
- asp.net-mvc – NHibernate Validator和ASP.NET MVC 4
- asp.net – 为什么这个DateTime.ParseExact语句不起作用?