【问题标题】:Dart - sending GET parameters that are listsDart - 发送列表形式的 GET 参数
【发布时间】: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。

感谢任何帮助。 谢谢

【问题讨论】:

    标签: http flutter dart


    【解决方案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 读取为 []。所以现在一切都运行良好。感谢您的帮助
    猜你喜欢
    • 2021-08-12
    • 2011-06-11
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多