添加 ResponseCache 属性时记录缓存控制警告

LP1*_*P13 8 asp.net-core-mvc asp.net-core asp.net-core-2.0

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

[ResponseCache(NoStore = true)]
public class MyController:Controller
{
}
Run Code Online (Sandbox Code Playgroud)

在startup.cs中我添加AutoValidateAntiforgeryTokenAttribute

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

            })
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我删除[ResponseCache(NoStore = true)],警告就会消失。但是,如果用户单击后退按钮,我需要该属性

小智 12

NoStore这还不够。该警告是默认防伪逻辑检查“cache-control”和“pragma”标头值是否为“no-cache”的结果。如果“cache-control”标头不包含“no-cache”或“pragma”标头是除“no-cache”或空之外的任何其他内容,则会创建该警告。

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

[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
Run Code Online (Sandbox Code Playgroud)

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