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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:55:19