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

使用Ajax调用C# POST方法时持续出现400 Bad Request错误求助

解决Ajax调用Razor Pages POST接口400错误的方案

核心原因及修复步骤

1. 补全防伪造令牌验证

ASP.NET Core Razor Pages默认强制校验POST请求的防伪造令牌,没带这个令牌直接返回400错误,这是最常见的原因。

具体操作:

  • 在privacy.cshtml页面里加个隐藏的令牌字段:
@Html.AntiForgeryToken()
  • 把令牌放到Ajax请求的请求头里:
$.ajax({
    url: '/Privacy',
    type: 'POST',
    headers: {
        'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val()
    },
    success: function (res) {
        console.log('请求成功');
    },
    error: function (xhr) {
        console.log('请求失败:' + xhr.status);
    }
});

2. 核对请求URL

确保Ajax的请求URL和页面路由完全匹配,比如你的页面是Privacy,URL就写/Privacy(注意大小写,ASP.NET Core路由默认区分大小写,可根据项目配置调整)。

3. 检查请求内容类型

如果POST方法要接收参数,得设置正确的contentType,比如传JSON数据时:

$.ajax({
    url: '/Privacy',
    type: 'POST',
    contentType: 'application/json',
    headers: {
        'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val()
    },
    data: JSON.stringify({ /* 这里填要传的参数 */ }),
    // 其他回调逻辑
});

4. 验证PageModel方法定义

你的OnPost方法是无参的,要是后续加了参数但请求没传对应值,也会触发400。如果要接收参数,得给方法加绑定属性,比如:

public IActionResult OnPost([FromBody] YourCustomModel model) {
    Console.WriteLine("in post");
    return Page();
}

额外排查建议

  • 打开浏览器开发者工具的网络标签,查看请求的详细信息,确认令牌是否携带、请求参数格式是否正确。
  • 检查项目里有没有自定义路由规则或中间件拦截了POST请求。

内容的提问来源于stack exchange,提问作者Sfdc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:13