我的 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=0NoStore=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 请求?

带有通用提供程序的 ASP.NET MVC 4 中的错误

从 Razor View-MVC3 ASP.NET 中的 Web.config 访问键值

实时 ASP.NET MVC Web 应用程序

我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?

ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作