【问题标题】:Dart Http POST with duplicate key form具有重复键形式的 Dart Http POST
【发布时间】:2021-07-26 17:40:39
【问题描述】:

我正在使用 http/http.dart 尝试像这样发布多部分/表单数据:

Version: "1.0"
Token: "xxxxxxxxxx"
Ids: "1"
Ids: "2"
Ids: "3"

问题是 Dart 接受不允许重复键的映射体。 我能想到的最好方法是将“Ids”键包装为数组。不幸的是,我无法与 Web 服务器开发团队协商,所以我唯一的选择是使用给定的 API。

有人对这个问题有建议吗?

【问题讨论】:

    标签: flutter http dart


    【解决方案1】:

    我在这里找到了解决方案:Flutter post api sending multiple values with same name parameter

    基本上只需在重复元素的名称后添加 [$count]。

    {
        "Version": "1.0",
        "Token": "xxxxxxxxxx",
        "Ids[0]": "1",
        "Ids[1]": "2",
        "Ids[2]": "3",
    }
    

    适用于我的情况。

    【讨论】:

      【解决方案2】:

      对此的最佳解决方案是将列表作为参数映射中的值传递。这是一个例子,

      var baseUrl = 'example.com';
      var path = 'posts';
      var params = {
        'ids[]': ['1', '2', '3'],
        'x': 'false',
      };
      
      // http://example.com/posts?ids[]=1&ids[]=2&ids[]=3&x=false
      var response = await http.get(Uri.http(baseUrl, path, params));
      

      注意:列表中的元素必须是字符串,你可以使用,将它们转换为字符串,

      list = list.map((e) => e.toString());
      

      【讨论】:

        【解决方案3】:

        这是https://github.com/dart-lang/http/issues/24。同时,根据Standard for adding multiple values of a single HTTP Header to a request or response,大多数具有相同名称的 HTTP 标头字段可以用逗号折叠在一起。在您的情况下,由于您的字段值可能不会嵌入逗号,您可能应该能够这样做:

        await http.post(
          url,
          headers: {
            "Version": "1.0",
            "Token": "xxxxxxxxxx",
            "Ids": "1,2,3",
          },
          ...);
        

        【讨论】:

        • 感谢您的回答。试一试,但它不起作用。似乎服务器 API 每个字段只接受一个值。
        猜你喜欢
        • 1970-01-01
        • 2015-08-28
        • 2018-06-07
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多