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

Flutter拼接URL公共前缀与接口后缀后get请求失败怎么解决

问题原因

  • 最核心的拼写问题:原正常请求的URL中接口后缀为GetAllCategories(首字母G大写),你拼接时使用的是getAllCategories(首字母g小写),绝大多数服务端的路由规则是大小写敏感的,该错误会直接触发404响应。
  • 手动拼接URL的适配问题:Flutter的Http请求库会对传入的URL字符串做URI规范校验,部分情况下会对不符合规范的字符做自动转义,该处理逻辑和Android端原生的请求逻辑不一致,容易出现未预期的路径异常。
  • 可能存在的隐藏字符问题:如果字符串定义过程中带入了不可见的空格、换行符,也会导致拼接后的路径和预期不符。

解决方法

  1. 先修正大小写错误
    将拼接的后缀改为首字母大写的GetAllCategories,拼接后先打印完整URL和原可用URL做逐字符对比,确认一致后先做测试:
final endPointUrl = "https://www.domain.bg/index.php?route=services/products/";
String finalUrl = endPointUrl + "GetAllCategories";
// 可先复制打印出的finalUrl到Postman/浏览器验证可用性
print(finalUrl);
Response res = await get(finalUrl);
  1. 更规范的方案:使用Uri类构建请求地址
    避免手动拼接字符串带来的各类编码、符号问题,用Dart内置的Uri类统一构建,后续扩展其他接口、添加额外查询参数也更方便:
// 抽离公共配置
const String baseHost = "www.domain.bg";
const String routePrefix = "services/products/";

// 封装统一的接口Uri构建方法
Uri buildApiUrl(String interfaceSuffix, [Map<String, dynamic>? extraParams]) {
  Map<String, dynamic> queryParams = {
    "route": "$routePrefix$interfaceSuffix",
    ...?extraParams
  };
  return Uri.https(baseHost, "/index.php", queryParams);
}

// 调用示例
Response res = await get(buildApiUrl("GetAllCategories"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:09:02