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

Flutter中Dio Post请求返回404错误求助

排查Dio Post请求404错误的可能原因

以下是针对你遇到的问题的具体排查方向:

  • 路径大小写不匹配
    你通过枚举_DioServicePaths.sessioninfo.name生成的请求路径是小写的sessioninfo,但服务器路由可能区分大小写(比如Postman中使用的是SessionInfo或sessionInfo),导致路径无法匹配。
    解决:手动指定和Postman一致的路径字符串,替换_DioServicePaths.sessioninfo.name为正确的路径,比如'SessionInfo'。

  • BaseURL格式错误
    当前BaseURL中的IP部分多了一个末尾的点:http://xx.xx.x.xx.:xx/,这会导致拼接后的请求URL无效。
    解决:修正BaseURL为http://xx.xx.x.xx:xx/(去掉IP后的多余点)。

  • 请求头缺失或不一致
    Postman可能自动添加了服务器要求的请求头(比如Content-Type: application/json),而Dio默认配置可能未包含这些头,导致服务器无法识别请求。
    解决:在Dio的BaseOptions中显式设置请求头:

    DioService() : _dio = Dio(BaseOptions(
      baseUrl: 'http://xx.xx.x.xx:xx/',
      headers: {'Content-Type': 'application/json'},
    ));
    

    同时对比Postman的请求头,确保所有必要字段都一致。

  • 请求体格式差异
    虽然toJson()方法生成了对应键值,但可能存在空值、日期格式不匹配等问题。可以打印实际发送的请求体,和Postman中的内容对比。
    解决:在请求前添加日志打印:

    print('发送的请求体:${jsonEncode(info.toJson())}');
    final response = await _dio.post(...);
    

    核对键名、值的类型和格式是否与Postman完全一致。

  • 查看完整请求详情
    通过Dio日志拦截器查看完整的请求URL、头、体,确认和Postman的请求是否完全一致。
    解决:添加日志拦截器:

    DioService() {
      _dio = Dio(BaseOptions(baseUrl: 'http://xx.xx.x.xx:xx/'));
      _dio.interceptors.add(LogInterceptor(requestBody: true, responseBody: true));
    }
    

    运行后查看控制台输出,对比Postman的请求细节,定位差异点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:33:09