Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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核心_C#_Asp.net Core_Asp.net Core 2.0_Cache Control_Antiforgerytoken - Fatal编程技术网

C# 反伪造和缓存控制头ASP.NET核心

C# 反伪造和缓存控制头ASP.NET核心,c#,asp.net-core,asp.net-core-2.0,cache-control,antiforgerytoken,C#,Asp.net Core,Asp.net Core 2.0,Cache Control,Antiforgerytoken,我试图覆盖asp.net core 2.0默认反伪造设置的缓存控制头 .net core始终将其设置为无缓存、无存储。我正在尝试使用私人的,这实际上是我想要的工作。没有缓存,没有商店似乎不总是工作给我某种防伪令牌是为了。。。使用者偶尔会有一种错误。将缓存控制设置为private似乎可以解决这个问题 但是.NETCore不允许我覆盖antiforgery设置的默认缓存控制 我尝试过以下方法: public async Task<IActionResult> Login(string

我试图覆盖asp.net core 2.0默认反伪造设置的缓存控制头

.net core始终将其设置为无缓存、无存储。我正在尝试使用私人的,这实际上是我想要的工作。没有缓存,没有商店似乎不总是工作给我某种防伪令牌是为了。。。使用者偶尔会有一种错误。将缓存控制设置为private似乎可以解决这个问题

但是.NETCore不允许我覆盖antiforgery设置的默认缓存控制

我尝试过以下方法:

  public async Task<IActionResult> Login(string returnUrl)
  {
          HttpContext.Response.Headers.Append(Microsoft.Net.Http.Headers.HeaderNames.CacheControl, "private");
       ....
  }

注意:现在仅对http使用

使用反伪造保护需要缓存控制:无缓存,无存储头。在任何情况下都绝对不能缓存带有令牌的页面,因为令牌会针对该资源的每个请求重新生成,并且必须将正确的令牌发送回以进行验证。换句话说,每次都必须从服务器上重新请求它。私有值不够好,因为在某些情况下它仍然允许缓存


出现错误的原因是,在加载页面之后和提交表单之前,用户身份验证状态已更改。这可能是由用户登录或注销造成的。antiforgery令牌将经过身份验证的用户用作其自身的一部分,因此如果用户的身份验证状态发生更改,则令牌在提交后将不再有效。如果用户登录或注销,您需要确保页面已刷新,以便可以设置新的Antifforgery cookie。

我想是这样,但正如我现在在登录页面上观察到的,情况并非如此。在另一个用.NETMVC制作的应用程序上,我成功地使用了private,它以前没有缓存,也没有商店
 public class NoCacheAttribute : ActionFilterAttribute
 {
       public override void OnResultExecuting(ResultExecutingContext context)
       {
        // tried both
        //context.HttpContext.Response.Headers.Add(HeaderNames.CacheControl, "private");
        //context.HttpContext.Response.Headers[HeaderNames.CacheControl] = "private";
       }
 }