Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 使用AntiforgeryToken从ASPNET.CORE获取400状态_C#_Asp.net Core - Fatal编程技术网

C# 使用AntiforgeryToken从ASPNET.CORE获取400状态

C# 使用AntiforgeryToken从ASPNET.CORE获取400状态,c#,asp.net-core,C#,Asp.net Core,我有一个带.net核心Api的angular 4应用程序。我想做一些端点的防伪验证。通过这种方式,我成功地在浏览器cookies中获得了一个令牌 这是startup.cs-配置: if (env.IsDevelopment()) { } app.UseDeveloperExceptionPage(); app.UseCors("AllowAll"); app.Use(next => context => { string method = context.Request.

我有一个带.net核心Api的angular 4应用程序。我想做一些端点的防伪验证。通过这种方式,我成功地在浏览器cookies中获得了一个令牌

这是startup.cs-配置:

if (env.IsDevelopment())
{
}

app.UseDeveloperExceptionPage();

app.UseCors("AllowAll");
app.Use(next => context =>
{
    string method = context.Request.Method;
    if (method == "GET")
    {
        var tokens = antiforgery.GetAndStoreTokens(context);
        context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
             new CookieOptions()
             {
                 HttpOnly = false,

             });
    }
    return next(context);

});
这来自ConfigureServices:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme =
                               JwtBearerDefaults.AuthenticationScheme;

    options.DefaultChallengeScheme =
                               JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{
    o.Authority = Configuration["IdentityServer"];
    o.Audience = "MyApi";
    o.RequireHttpsMetadata = false;

});

services.AddCors(o => o.AddPolicy("AllowAll", builder =>
{
    builder.AllowAnyOrigin()
           .AllowAnyMethod()
           .AllowAnyHeader()
           .AllowCredentials();
}));

services.AddAntiforgery(options =>
{
    options.HeaderName = "X-XSRF-TOKEN";
    options.RequireSsl = false;
    options.SuppressXFrameOptionsHeader = false;
});
这在控制器中:

[Authorize]
[ValidateAntiForgeryToken]
[HttpPost, Route("irrelevant")]
public IActionResult CalledByTheFront([FromBody] irrelevant)
{
    return Ok("irrelevant");
}
我在浏览器中找到的cookies

以及请求:

我做错了什么? 另外,你知道为什么浏览器中的Cookie只有在API重新启动时才会更新,尽管每个GET请求的头中都有一个Cookie吗