我正在做一个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 = "*")]

以上三个设置是否都会阻止缓存数据,或者每个设置都有不同的含义?

Second question定义duration=0duration=0之间的主要区别是什么;NoStore=true ? 它们都会阻止缓存吗?

推荐答案

NoStore属性用于通知代理服务器和浏览器,它们不应通过在请求头中设置Cache-Control: no-store来存储缓存内容的永久副本.

Duration simply specifies how long the content of the controller action should be cached, e.g. 10seconds. This will set the Cache-Control: max-age to >= 0. And also sets the Expires header to a valid timestamp.

对于你最初的问题,不,这三种变体的含义不同.

[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.max-age=0 and no-cache etc.之间的区别.

最后,这三种方法可能会阻止缓存数据,但仍有不同的含义.

Asp.net相关问答推荐

在具有多个项目(API/服务/数据等)的解决方案中编写 SignalR 服务的最佳方法是什么?

如何使用特定视图(不是控制器名称)返回 ActionResult

用户NT AUTHORITY\NETWORK SERVICE登录失败

如何从 asp:Repeater 循环遍历项目模板中的项目?

在 Blazor 中 Select 框绑定

配置转换和TransformXml 任务失败错误消息

是否有用于 Asp.net 标记的#IF DEBUG?

IIS 7.5 上没有 asp.net 功能

如何从 HTTP 请求中获取 MAC 地址?

ASP.NET 上的 WebSockets 教程

如何确定服务器端 C# 上的浏览​​器窗口大小

web.config 中与 targetFramework 相关的配置错误

由 UpdatePanel 内 GridView 内的 LinkBut​​ton 触发的完整回发

MVC3 值 Ajax 文件上传

MSBuild DeployOnBuild=true 不发布

Docker 中的 ASPNETCORE_ENVIRONMENT

URL 路由、图像处理程序和潜在危险的 Request.Path 值

将Bundle 包添加到现有的 ASP.NET Webforms 解决方案

IronRuby死了吗?

System.Drawing.Image.FromFile() 上的内存不足异常