ASP.NET Core Razor - AJAX Post - 400 Bad Request

时间:2018-04-27 14:11:09

标签: ajax razor asp.net-core

ASP.NET Core Razor页面中的AJAX POST不起作用。它总是返回400 Bad Request。

我有以下页面方法代码:

[ValidateAntiForgeryToken]
public async Task<IActionResult> OnPostProcessCCPaymentAsync(CheckInPaymentModel checkInPaymentModel)
    {
        return new JsonResult(checkInPaymentModel.AmountExtra);
    }

以下内容在页面中设置:

@Html.AntiForgeryToken()

以下JS AJAX调用:

$.ajax({
    type: "POST",
    url: "/CheckIn/Payment?handler=ProcessCCPayment",
    contentType: "application/json",
    beforeSend: function (xhr) {
        xhr.setRequestHeader("XSRF-TOKEN",
            $('input:hidden[name="__RequestVerificationToken"]').val());
    },
    data: JSON.stringify({
        // Those property names must match the property names of your PromotionDecision  view model
        Donate: true
    }), 
    success: function (response) {
        $(".paymentDetails .loading").addClass("loader").removeClass("loading");
    },
    failure: function (response) {
        $(".paymentDetails .loading").addClass("loader").removeClass("loading");
    }
});

如果Ajax类型改为GET&amp;该方法更改为OnGetProcessCCPaymentAsync,然后它正确发送到服务器。

然而,Core Razor中的AJAX POST总是因400 Bad Request而失败。

我正在直接从Visual Studio进行调试,因此URL为http://localhost:62632/CheckIn/Payment所以我不知道如何找到日志以查看调试实例收到请求时发生的错误。

非常感谢任何想法或建议。

1 个答案:

答案 0 :(得分:1)

因此,阅读上面的修订并发表评论(这使我挠头了几分钟)没有困惑,解决方案是更改:

xhr.setRequestHeader("XSRF-TOKEN",

收件人:

xhr.setRequestHeader("RequestVerificationToken",

答案在修订本中,有人编辑了它。评论中还简要提到了它。我当然不会对此表示任何赞赏,只是想尽量减少对以后遇到这种精神错乱而犯错误的任何人的困惑。