【发布时间】:2021-07-26 17:40:39
【问题描述】:
我正在使用 http/http.dart 尝试像这样发布多部分/表单数据:
Version: "1.0"
Token: "xxxxxxxxxx"
Ids: "1"
Ids: "2"
Ids: "3"
问题是 Dart 接受不允许重复键的映射体。 我能想到的最好方法是将“Ids”键包装为数组。不幸的是,我无法与 Web 服务器开发团队协商,所以我唯一的选择是使用给定的 API。
有人对这个问题有建议吗?
【问题讨论】:
我正在使用 http/http.dart 尝试像这样发布多部分/表单数据:
Version: "1.0"
Token: "xxxxxxxxxx"
Ids: "1"
Ids: "2"
Ids: "3"
问题是 Dart 接受不允许重复键的映射体。 我能想到的最好方法是将“Ids”键包装为数组。不幸的是,我无法与 Web 服务器开发团队协商,所以我唯一的选择是使用给定的 API。
有人对这个问题有建议吗?
【问题讨论】:
我在这里找到了解决方案: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",
}
适用于我的情况。
【讨论】:
对此的最佳解决方案是将列表作为参数映射中的值传递。这是一个例子,
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());
【讨论】:
这是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",
},
...);
【讨论】: