.NET 7 Web应用中JavaScript POST请求返回400 Bad Request问题
解决.NET 7 Razor Pages POST请求400 Bad Request问题
针对你遇到的问题,按以下步骤排查修复:
1. 修正Razor Pages请求URL格式
Razor Pages的POST handler请求格式是页面路径?handler=Handler名称,不需要在URL里写OnPost前缀。你的后端方法是OnPostUpdateQuantity,对应的handler名称是UpdateQuantity,所以前端请求URL应该改为:
url: "/Client?handler=UpdateQuantity",
之前错误的/Client/OnPostUpdateQuantity或者Client?handler=OnPostUpdateQuantity都会导致路由匹配失败,返回400。
2. 避免参数绑定失败
前端获取的数量如果是空文本或者非数字,parseInt会返回NaN,传递给后端int类型参数时会触发绑定失败,返回400。给参数加默认值处理:
var palletQuantity = parseInt($(`#product-quantity-pallet-${barcode}`).text()) || 0; var bagQuantity = parseInt($(`#product-quantity-bag-${barcode}`).text()) || 0;
3. 确认Antiforgery Token配置生效
虽然你在方法上加了[IgnoreAntiforgeryToken],但如果全局配置强制要求验证,可能还是会触发400。可以全局禁用测试:
在Program.cs中添加:
builder.Services.AddRazorPages() .AddRazorPagesOptions(options => { options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); });
如果这样能正常请求,说明之前的特性可能因配置冲突未生效,后续可以再针对性调整。
4. 查看详细错误信息
打开浏览器开发者工具的Network标签,找到失败的POST请求,查看Response标签页的内容。.NET通常会返回具体的错误原因,比如"参数palletQuantity无法绑定"、"路由未找到"等,这是最快定位问题的方式。
5. 明确请求内容类型
在jQuery ajax中明确指定contentType,避免编码问题:
$.ajax({ // 其他配置 contentType: "application/x-www-form-urlencoded; charset=UTF-8", // 其他配置 });
内容的提问来源于stack exchange,提问作者luke
相关产品推荐
相关产品推荐

