我的 asp.net mvc Web 应用程序中的 OutputCache 设置。防止缓存的多种语法
Posted
技术标签:
【中文标题】我的 asp.net mvc Web 应用程序中的 OutputCache 设置。防止缓存的多种语法【英文标题】:OutputCache setting inside my asp.net mvc web application. Multiple syntax to prevent caching 【发布时间】:2014-01-20 15:23:22 【问题描述】:我正在开发一个 asp.net MVC Web 应用程序,我需要知道在为我的操作方法定义 OutputCache 时是否有任何差异,如下所示:-
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
VS
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
VS
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
以上三个设置会阻止缓存数据,还是每个都有不同的含义?
第二个问题定义 duration=0
和 NoStore=true
之间的主要区别是什么?他们都会阻止缓存吗?
谢谢
【问题讨论】:
【参考方案1】:NoStore
属性用于通知代理服务器和浏览器,它们不应通过在请求标头中设置 Cache-Control: no-store
来存储缓存内容的永久副本。
Duration 只是指定控制器动作的内容应该被缓存多长时间,例如10 秒。这会将Cache-Control: max-age
设置为>= 0。还将Expires
标头设置为有效的时间戳。
对于您最初的问题,不,这三个变体的含义不同。
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
像这样创建一个缓存头
Cache-Control: private, max-age=0
Expires: Fri, 03 Jan 2014 12:32:15 GMT
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
创建以下缓存头:
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
这基本上是你想看到的,如果你想通过各种方式来阻止缓存。 VaryByParam 是可选的(至少在 MVC5 中)并且默认值是“*”,所以你可以简单地使用 [OutputCache(NoStore = true, Location = OutputCacheLocation.None)]
。
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
甚至创建公共缓存控件...
Cache-Control: public, no-store, max-age=0
Expires: Fri, 03 Jan 2014 12:36:38 GMT
有一篇关于 SO 的好帖子讨论了max-age=0 and no-cache etc. 之间的区别。
最后,这三个可能会阻止缓存您的数据,但仍然具有不同的含义。
【讨论】:
移除 OutputCache 将强制某些浏览器(例如 IE)自动缓存部分视图。这就是我定义这个的原因。所以如果我定义 NoStore=true ,那么持续时间没有任何意义,对吗?? 你提到Outputcache的三种语法不会阻止缓存?我认为他们应该防止缓存? 很抱歉造成混淆,希望我的更新现在能回答您的问题。你是对的,不为动作定义任何缓存设置会让 MVC 创建一个默认的“私有”缓存头,让浏览器最终缓存它...... 后面说得对,但第三个例子的正确语法是:Location=OutputCacheLocation.None -- 你不能只使用“None”以上是关于我的 asp.net mvc Web 应用程序中的 OutputCache 设置。防止缓存的多种语法的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?
从 Razor View-MVC3 ASP.NET 中的 Web.config 访问键值
我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?
ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作