Dart/Flutter调用Uri.https报FormatException无效字符错误咨询
报错原因
Uri.https 构造函数对入参格式有严格的分段要求:
- 第一个入参对应 URI 的 authority 段,也就是
https://之后、第一个路径分隔符/之前的部分,仅允许填写域名/IP地址,可按需追加:端口号,不允许出现/字符 - 第二个入参对应 URI 的路径段,所有跟在主机后的斜杠开头的路径内容,都要放在这个参数里
你传入的APIHOST值为hammbwdsc02/visoon-backend,把本属于路径段的/visoon-backend错放到了主机参数里,解析到第12位的/时,构造器判定主机字段出现非法字符,直接抛出FormatException,和你看到的异常指向完全匹配。
修复方法
把混在主机参数里的路径前缀拆出来,和业务路径拼接后传入路径参数即可,修复后的可运行代码:
void main() { // 主机参数仅保留纯域名/IP,不带任何斜杠和路径内容 const apiHost = 'hammbwdsc02'; // 路径部分拼接服务前缀和业务接口路径 const requestPath = '/visoon-backend/path'; final uri = Uri.https(apiHost, requestPath, {'q': 'dart'}); print(uri); // 运行输出:https://hammbwdsc02/visoon-backend/path?q=dart }
如果你的HTTPS服务没有用默认443端口,直接在主机参数后追加端口即可,例如hammbwdsc02:8443是合法的主机参数格式。
内容的提问来源于stack exchange,提问作者Davood
相关产品推荐
相关产品推荐

