使用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
相关产品推荐
相关产品推荐

