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&lt;String, dynamic&gt;。查看源代码:

  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 可以是 StringIterable&lt;String&gt;。所以,

  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 参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中获取数组作为 GET 查询参数

接口测试工具

axios怎么发送xml数据

将参数字典排序,并转为 GET 参数形式.

实际参数列表和形式参数列表的长度错误不同

springboot接受post/get参数值的几种形式,Java