ASP.NET Core 5中AJAX调用接口返回400 Bad Request错误如何解决
AJAX请求返回400错误排查解决方案
常见原因及对应解决方法
1. 防伪令牌验证失败
后端接口标注了[AutoValidateAntiforgeryToken]特性,ASP.NET会默认校验POST请求携带的防伪令牌,前端AJAX未携带该令牌会直接返回400错误。
解决方法:
首先在页面任意位置添加防伪标记生成标签:@Html.AntiForgeryToken()然后在AJAX的请求头中添加该令牌即可。
2. 请求数据格式与contentType不匹配
代码中设置了contentType: 'application/json; charset=utf-8',但传递的data是普通JS对象,没有整体序列化为JSON字符串,后端无法正确解析JSON格式的请求体,导致400错误。
解决方法:
将data参数整体序列化,同时后端参数加[FromBody]标记明确从请求体读取参数,修改后的完整代码如下:
前端AJAX代码:function UserCheckId() { $.ajax({ contentType: 'application/json; charset=utf-8', crossDomain: true, type: "POST", dataType: "json", url: '@Url.Action("UserCheckId", "Home")', headers: { "RequestVerificationToken": $('input:hidden[name="__RequestVerificationToken"]').val() }, data: JSON.stringify({ qrcode: scannedQR[txt] }), success: function (data) { alert(data); } }); }后端接口代码:
[HttpPost] [AutoValidateAntiforgeryToken] public ActionResult UserCheckId([FromBody] string qrcode) { string result = qrcode; return Json(result, System.Web.Mvc.JsonRequestBehavior.AllowGet); }3. 其他可排查点
打开浏览器控制台的「网络」标签,查看该AJAX请求的详细信息:- 确认请求的URL是否正确,无拼写错误
- 查看请求体中的参数是否正常,不为空且格式符合要求
- 若开启了跨域配置,确认后端的CORS策略是否允许当前站点的POST请求
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

