.NET Core 3.1中无法通过AJAX调用API,请求技术解决方案
.NET Core 3.1 AJAX调用API接口失败排查与解决
问题代码
API控制器代码
[Route("Api")] [ApiController] public class ApiUsersController : ControllerBase { [HttpPost] [Route("Users/demo")] public ActionResult demo([FromBody]model data) { return "OK"; } }
jQuery AJAX代码
var model = {key: "123"} $.ajax({ type: 'POST', url: 'Api/Users/demo', data: JSON.stringify(model), dataType: 'json', contentType: 'application/json; charset=utf-8', async: true, // 其他回调逻辑 });
排查与解决步骤
1. 修正模型绑定问题
控制器中[FromBody]model data的model必须是一个公开的自定义类,且包含与请求数据匹配的属性,否则模型绑定会失败(返回400错误)。示例定义:
public class DemoRequestModel { public string key { get; set; } }
然后将Action参数改为:
public IActionResult Demo([FromBody]DemoRequestModel data)
2. 调整Action返回格式
前端dataType: 'json'期望JSON格式响应,当前直接返回字符串"OK"会导致JSON解析失败。修改返回逻辑:
// 返回JSON格式的成功响应 public IActionResult Demo([FromBody]DemoRequestModel data) { return Ok(new { message = "OK" }); } // 或如果仅返回字符串,需指定内容类型 public IActionResult Demo([FromBody]DemoRequestModel data) { return Content("OK", "application/json"); }
3. 确认路由与路径正确性
- 控制器路由
[Route("Api")]+ Action路由[Route("Users/demo")]的完整路径为Api/Users/demo,与AJAX的url一致,但建议给URL加上根路径斜杠,避免相对路径错误:
url: '/Api/Users/demo'
4. 处理跨域问题(跨域名场景)
如果前端页面与API部署在不同域名下,需在.NET Core中配置CORS:
在Startup.cs的ConfigureServices中添加:
services.AddCors(options => { options.AddPolicy("AllowAll", policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); });
在Configure方法中启用(需放在UseRouting与UseAuthorization之间):
app.UseCors("AllowAll");
5. 利用浏览器工具定位问题
打开浏览器F12开发者工具:
- 查看控制台是否有JS语法错误;
- 查看网络标签,找到该请求,检查状态码(400/404/500等)和响应内容:
- 400:模型绑定失败,检查请求数据与模型是否匹配;
- 404:路由错误,确认API路径是否正确;
- 500:服务器内部错误,查看后端日志排查异常;
- 405:HTTP方法不允许,确认Action的
[HttpPost]特性正确。
6. 添加AJAX错误回调
在AJAX配置中加入错误处理,方便直接查看错误详情:
$.ajax({ // 现有配置 error: function(xhr, status, error) { console.log("状态码:" + xhr.status); console.log("错误信息:" + error); console.log("响应内容:" + xhr.responseText); } });
内容的提问来源于stack exchange,提问作者kai
相关产品推荐
相关产品推荐

