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

Flutter调用ASP.NET Core API返回404错误,求解决方案

问题排查与解决方案

针对你遇到的Flutter调用ASP.NET Core API返回404的问题,结合Postman请求正常的情况,按以下步骤逐一排查:

1. 核对请求URL的一致性

  • 逐字符对比Flutter代码中的请求URL与Postman中的完整URL:
    • 确认协议(http/https)完全一致,比如Postman用http://localhost:5000,Flutter不要误写成https;
    • 端口号必须匹配,ASP.NET Core开发服务器默认端口是5000(HTTP)或5001(HTTPS),检查Flutter代码里的端口是否正确;
    • 路由路径要完全对应,比如API的注册接口路由是api/Account/Register,Flutter里不能遗漏api前缀;
    • 注意大小写(虽然ASP.NET Core默认路由不区分大小写,但部分自定义路由配置可能敏感)。

2. 验证请求方法与参数格式

  • 确认Flutter使用的请求方法和Postman一致:Postman用POST,Flutter不能写成GET;
  • 检查请求体与请求头:
    • Postman如果是JSON格式提交参数,Flutter必须设置Content-Type: application/json请求头,并且将参数序列化为JSON字符串:
      final response = await http.post(
        Uri.parse('http://你的API地址/api/Account/Register'),
        headers: {'Content-Type': 'application/json'},
        body: jsonEncode({
          'username': 'test',
          'password': '123456'
        }),
      );
      
    • 避免混用FormData格式(除非API明确要求),Postman里如果选了raw-JSON,Flutter就要对应使用JSON序列化的body。

3. 检查设备网络访问规则

  • Android模拟器:访问本地API必须用10.0.2.2代替localhost,因为模拟器的localhost指向自身而非宿主电脑;
  • iOS模拟器:可以直接用localhost或127.0.0.1,但要确保宿主电脑的防火墙允许API端口的访问;
  • 物理设备:需确保设备与API所在电脑在同一局域网,使用宿主电脑的局域网IP(如192.168.1.100)访问,不能用localhost。

4. 确认API的跨域(CORS)配置

虽然404是路由问题,但错误的CORS配置可能导致请求被拦截后返回异常状态码。检查ASP.NET Core的CORS配置:
在Program.cs中确保已添加并启用CORS策略:

// 注册CORS服务
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowLocalFlutter", policy =>
    {
        policy.WithOrigins("http://localhost:5000", "http://10.0.2.2:5000") // 对应Flutter运行的地址
              .AllowAnyMethod()
              .AllowAnyHeader();
    });
});

// 在路由之后启用CORS
app.UseRouting();
app.UseCors("AllowLocalFlutter"); // 必须放在UseRouting之后,UseAuthorization之前
app.UseAuthorization();

开发环境可以临时用AllowAnyOrigin()简化配置,生产环境需指定具体允许的域名。

5. 启用API日志定位请求

在ASP.NET Core中启用路由调试日志,确认请求是否真的到达服务器:
修改appsettings.Development.json:

"Logging": {
    "LogLevel": {
        "Microsoft.AspNetCore.Routing": "Debug",
        "Microsoft.AspNetCore.Hosting": "Debug"
    }
}

运行API后查看控制台日志:

  • 如果日志中没有接收到Flutter的请求,说明是Flutter端的网络请求未发送成功;
  • 如果有请求记录但返回404,说明路由不匹配,检查API的控制器路由配置(比如[Route("api/[controller]")]是否正确)。

6. 对比请求详情

用Flutter的日志工具打印完整请求信息,和Postman的请求详情逐行对比:

import 'dart:developer';

// 在请求前后打印日志
log('请求URL: ${requestUri.toString()}');
log('请求方法: POST');
log('请求头: ${headers.toString()}');
log('请求体: ${body.toString()}');
final response = await http.post(...);
log('响应状态码: ${response.statusCode}');
log('响应内容: ${response.body}');

对比Postman的“Headers”和“Body”标签页,找出两者的差异点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:20:20