.Net Core 验证AntiForgeryToken 抛出 Web API 400 错误

15

我正在使用带有 .net Core 1.1 的 Web Api 的 Visual Studio 2017,但是我遇到了一个 400 Bad Request 错误。

错误出现的情况包括:

  1. Angular http
  2. Fiddler
  3. Postman
  4. SoapUI
  5. Swagger

在 POST 请求中出现 ASP.NET Web API“400 Bad Request”错误。

[HttpPut]
//[ValidateAntiForgeryToken]
public IActionResult Put([FromBody]VeteranInteraction sessionTracker)
{ //.... } 

为什么会发生这种情况?

ValidateAntiForgeryToken是问题所在,如果我将其注释掉就能正常工作。


你尝试过移除 FromBody 吗?还请从其中一个来源(最好是 Postman,因为它最适合测试)中发布准确的数据。 - Neville Nazerane
1
顺便提一下,400 表示您发送的数据格式不符合预期。 - Neville Nazerane
除了注释掉那个令牌后发送的JSON数据可以正常工作之外,没有其他问题。 - user8545750
这个问题解决了吗? - paultechguy
@paultechguy,这个方法对你有效吗?我也遇到了同样的问题。为了确保,我甚至将令牌硬编码进去了。 - undefined
2个回答

9

您必须在每个请求中发送防伪令牌

 var arr = { City: 'Tehran', Age: 25 };
    $.ajax({
        url: "@Url.Action("SaveAccess", "Access")",
        type: 'POST',
        data: JSON.stringify(arr),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: false,
        beforeSend: function (request) {
            request.setRequestHeader("RequestVerificationToken", $("[name='__RequestVerificationToken']").val());
        },
        success: function (msg) {
            alert(msg);
        }
    });

2

在每个需要验证的请求中,都需要发送反向伪造令牌,可以作为cookie或http头。

请参阅此处的文档。其中有一个部分介绍如何配置angular js来执行此操作。


1
我使用了完全相同的实现,但无法使其正常工作。链接 - JSON
@json 你成功了吗?我也遇到了同样的问题。我甚至硬编码了令牌以确保它正确。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接