Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的asp.net mvc web应用程序中的OutputCache设置。防止缓存的多种语法_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Caching - Fatal编程技术网

C# 我的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之间的主要区别是什么?它们都会阻止缓存吗? 感谢通过在请

我正在使用asp.net MVC web应用程序,我需要知道在为我的操作方法定义OutputCache时是否存在任何差异,如下所示:-

[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