首页 > 解决方案 > 添加 ResponseCache 属性时记录缓存控制警告

问题描述

我有 ASP.NET Core 2.2 应用程序。no-store=true当用户单击浏览器的后退按钮时,我已经设置了所有控制器

[ResponseCache(NoStore = true)]
public class MyController:Controller
{
}

在 startup.cs 我添加 AutoValidateAntiforgeryTokenAttribute

services.AddMvc(options =>
            {   
                options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());                

            })

但是对于每个请求,我都会看到一条警告被记录下来

'Cache-Control' 和 'Pragma' 标头已被覆盖并分别设置为 'no-cache, no-store' 和 'no-cache' 以防止缓存此响应。不应缓存任何使用防伪的响应。

我知道任何使用防伪的响应都不应该被缓存,我已经NoStore=true设置了。那么为什么会有警告。

如果我删除[ResponseCache(NoStore = true)],那么警告就消失了。但是,在用户单击后退按钮的情况下,我需要该属性

标签: asp.net-coreasp.net-core-mvcasp.net-core-2.0

解决方案


NoStore还不够。该警告是默认防伪逻辑检查“无缓存”的“缓存控制”和“杂注”标头值的结果。如果“cache-control”标头不包含“no-cache”或“pragma”标头不是“no-cache”或为空,则会创建该警告。

您始终必须在缓存设置中包含该位置:

[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]

这会将 'cache-control' 标头设置为 'no-store,no-cache' 以及将 'pragma' 标头设置为 'no-cache' 并且不会创建警告。


推荐阅读