Dart - 发送列表形式的 GET 参数
Posted
技术标签:
【中文标题】Dart - 发送列表形式的 GET 参数【英文标题】:Dart - sending GET parameters that are lists 【发布时间】:2019-12-13 11:55:02 【问题描述】:我想在 dart 中使用 http GET 请求发送参数。这里的第一个答案很好地证明了这一点:How do you add query parameters to a Dart http request?
var uri =
Uri.https('www.myurl.com', '/api/query', queryParameters);
但是,一个主要问题是 queryParameters 只接受:
Map<String, String>
这不允许我传入列表/数组。
如果我将获取请求更改为发布请求,我可以轻松发送 颤振文档中概述的主体(作为 json 编码的字符串):https://pub.dev/documentation/http/latest/http/post.html
post(url, Map<String, String> headers, body, Encoding encoding)
但是,get 请求没有这样的查询参数等效参数:https://pub.dev/documentation/http/latest/http/get.html
get(url, Map<String, String> headers)
我也尝试将查询参数直接添加到 url,如下所示:
get('www.myurl.com/api/query/?array[]=value1&array[]=value2&array[]=value3)
但是当我在服务器中收到方括号 [] 时,它总是会转换为 %5B%5D。
感谢任何帮助。 谢谢
【问题讨论】:
【参考方案1】:事实上,queryParameter
需要 Map<String, dynamic>
。查看源代码:
factory Uri(
String scheme,
String userInfo,
String host,
int port,
String path,
Iterable<String> pathSegments,
String query,
Map<String, dynamic /*String|Iterable<String>*/ > queryParameters,
String fragment) = _Uri;
dynamic
可以是 String
或 Iterable<String>
。所以,
var uri = Uri(
scheme: 'http',
host: 'www.myurl.com',
path: '/api/query/',
queryParameters:
'array': ['value1', 'value2', 'value3'],
,
);
print(uri);
打印:
http://www.myurl.com/api/query/?array=value1&array=value2&array=value3
【讨论】:
[]
后缀是 php 服务器的杂项。服务器不接受 URL 编码形式吗? (URL 中唯一允许使用非转义括号的位置是 IPv6 地址。)
哎呀,我刚刚删除了我的评论,因为我意识到我的服务器正在将 %5B%5D 读取为 []。所以现在一切都运行良好。感谢您的帮助以上是关于Dart - 发送列表形式的 GET 参数的主要内容,如果未能解决你的问题,请参考以下文章