Flutter中Uri()如何关闭查询参数编码?
解决方案:避免Uri自动编码SAS Token
问题核心在于Uri构造函数的queryParameters参数会自动对所有参数值进行URL编码,但SAS Token本身已经是符合URL规范的编码字符串,二次编码会破坏其结构,导致Azure无法识别。
可以用以下两种方式解决:
直接拼接完整URL后解析
自己手动拼接包含SAS Token的完整URL字符串,再用Uri.parse()解析,绕过自动编码逻辑:// 假设_sasToken是已处理好的完整SAS Token字符串(如包含?sig=xxx&sv=xxx这类格式) final fullUrl = '$scheme://$name.blob.$suffix$path$_sasToken'; final uri = Uri.parse(fullUrl);如果
_queryParams是键值对形式,且SAS Token是其中一个参数,可单独提取后拼接:final sasToken = _queryParams['sas']; // 假设SAS Token对应此键 final fullUrl = '$scheme://$name.blob.$suffix$path?$sasToken'; final uri = Uri.parse(fullUrl);先构造基础Uri再拼接Query
先构造不带Query的基础Uri,再手动拼接已编码好的SAS Token部分:final baseUri = Uri(scheme: scheme, host: '$name.blob.$suffix', path: path); final uri = Uri.parse('$baseUri?$sasToken');
这两种方式都能保证SAS Token以原始未二次编码的形式加入Uri,Azure即可正确识别并处理请求。
内容的提问来源于stack exchange,提问作者Mike6679
相关产品推荐
相关产品推荐

