You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:04:57