nrr*_*nrr 12 ajax razor asp.net-core
已解决 - 请求标头应为RequestVerificationToken而不是XSRF-TOKEN
ASP.NET Core Razor页面中的AJAX POST不起作用.它总是返回400 Bad Request.
我有以下页面方法代码:
[ValidateAntiForgeryToken]
public async Task<IActionResult> OnPostProcessCCPaymentAsync(CheckInPaymentModel checkInPaymentModel)
{
return new JsonResult(checkInPaymentModel.AmountExtra);
}
Run Code Online (Sandbox Code Playgroud)
在页面中设置以下内容:
@Html.AntiForgeryToken()
Run Code Online (Sandbox Code Playgroud)
以下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");
}
});
Run Code Online (Sandbox Code Playgroud)
如果Ajax类型更改为GET并且方法更改为OnGetProcessCCPaymentAsync,则它会正确地发送到服务器.
但是,Core Razor中的AJAX POST总是因400 Bad Request而失败.
我直接从Visual Studio调试,因此URL是http:// localhost:62632/CheckIn/Payment 所以我不知道如何找到日志以查看调试实例收到请求时发生的错误.
任何想法或建议将不胜感激.
为了避免阅读上面的修订和评论(这让我摸不着头脑),解决方案是更改:
xhr.setRequestHeader("XSRF-TOKEN",
Run Code Online (Sandbox Code Playgroud)
到:
xhr.setRequestHeader("RequestVerificationToken",
Run Code Online (Sandbox Code Playgroud)
答案就在修订版中,有人把它删掉了。评论中也简要提到了这一点。我当然不会接受任何功劳,只是想尽量减少将来遇到这种疯狂错误的其他人的困惑。
归档时间: |
|
查看次数: |
4762 次 |
最近记录: |