【发布时间】:2025-12-09 05:55:02
【问题描述】:
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 并且方法更改为 OnGetProcessCCPaymentAsync,则它会正确发送到服务器。
但是,Core Razor 中的 AJAX POST 总是失败并返回 400 Bad Request。
我是直接从 Visual Studio 调试,所以 URL 是 http://localhost:62632/CheckIn/Payment,所以我不知道如何定位日志以查看调试实例接收请求时发生了什么错误。
任何想法或建议将不胜感激。
【问题讨论】:
-
在进行 POST 时,您是否尝试过使用 [HttpPost] 装饰 MVC 操作?
-
您的请求标头有错误的名称,它应该是 RequestVerificationToken 并且还要注意 AntiForgeryToken 不用于 GET。在您的问题中添加 razor-pages 标签是个好主意。
-
@MarkG 成功了。标头应该是“RequestVerificationToken”而不是“XSRF-TOKEN”learnrazorpages.com/security/request-verification
-
我认为如果您可以将问题恢复为原始文本并将编辑添加为答案会更好。有同样的问题,这篇文章帮助我解决了它! +1
-
请将解决方案作为答案发布,而不是更新问题。还有@MarkG,请随时发表您的评论作为答案。
标签: ajax razor asp.net-core