C# 我的asp.net mvc web应用程序中的OutputCache设置。防止缓存的多种语法
我正在使用asp.net MVC web应用程序,我需要知道在为我的操作方法定义OutputCache时是否存在任何差异,如下所示:-C# 我的asp.net mvc web应用程序中的OutputCache设置。防止缓存的多种语法,c#,asp.net,asp.net-mvc,asp.net-mvc-4,caching,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Caching,我正在使用asp.net MVC web应用程序,我需要知道在为我的操作方法定义OutputCache时是否存在任何差异,如下所示:- [OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")] VS VS 以上三种设置是否都会阻止缓存数据,或者每种设置都有不同的含义 第二个问题定义duration=0和NoStore=true之间的主要区别是什么?它们都会阻止缓存吗? 感谢通过在请
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
VS
VS
以上三种设置是否都会阻止缓存数据,或者每种设置都有不同的含义
第二个问题定义duration=0
和NoStore=true
之间的主要区别是什么?它们都会阻止缓存吗?
感谢通过在请求头中设置
缓存控制:no store
,使用NoStore
属性通知代理服务器和浏览器不应存储缓存内容的永久副本
Duration仅指定控制器操作的内容应缓存多长时间,例如10秒。这将把缓存控制: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
创建以下缓存标头:
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
这基本上就是您想要看到的,如果您想通过各种方式阻止缓存。VaryByParam是可选的(至少在MVC5中是这样),并且默认值是“*”,因此您只需使用[OutputCache(NoStore=true,Location=OutputCacheLocation.None)]
甚至创建一个公共缓存控件
Cache-Control: public, no-store, max-age=0
Expires: Fri, 03 Jan 2014 12:36:38 GMT
在SO上有一篇很好的帖子讨论了两者之间的区别
最后,这三个选项可能会阻止缓存数据,但仍有不同的含义。删除OutputCache将强制某些浏览器(例如IE)自动缓存部分视图。这就是我定义这个的原因。因此,如果我定义NoStore=true,那么持续时间就没有任何意义了,对吗?您提到Outputcache的三种语法不会阻止缓存?我认为他们应该阻止缓存?很抱歉造成混淆,希望我的更新现在能回答您的问题。您是对的,不为操作定义任何缓存设置将允许MVC创建一个默认的“私有”缓存头,让浏览器最终对其进行缓存…稍后会正确说明,但第三个示例的正确语法是:Location=OutputCacheLocation.None——您不能只使用“None”
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
Cache-Control: public, no-store, max-age=0
Expires: Fri, 03 Jan 2014 12:36:38 GMT