flutter - Flutter中POST表单数据中的数组
问题描述
我已经准备好对邮递员的请求,更新我网站上的一组数据并将飞镖代码复制到我的颤振应用程序中,这是邮递员代码
var headers = {
'Authorization': '...',
'Cookie': '...'
};
var request = http.MultipartRequest('POST', Uri.parse('my_endpoint'));
request.fields.addAll({
'fields[0][field_id]': '20',
'fields[0][group_id]': '1',
'fields[0][value][]': 'Android Developer',
'fields[0][value][]': 'Web Developer'
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
问题是Flutter删除了body map中的最后一对,因为它与前一个key相同,所以只有更新操作的结果是Web Developer only,但我认为我的请求只能这样工作,我怎么能处理这个问题。
解决方案
您可以将 formData 中的数组作为{key[value][0]: value1, key[value][1]: value2, ...}
. 在这里实现这一目标的一种方法是:
final values = ["Android Developer", "Web Developer"];
Map<String, String> valuesArray = {
for (var i = 0; i < values.length; i++) 'fields[0][value][$i]': values[i]
};
request.fields.addAll({
...valuesArray,
'fields[0][field_id]': '20',
'fields[0][group_id]': '1',
});
或者,如果可能,我建议您使用 content-type:json,因为创建 Map<String, dynamic> 主体并使用 jsonEncode 对其进行编码更容易。
推荐阅读
- python - 类型提示 __call__() 魔术方法
- php - 在所有输入都填满之前,如何阻止页面重新加载?
- c# - 主框架监听页面按钮点击事件
- sql - SQL Server 命名策略管理阻止正确命名的存储过程
- laravel - Laravel:如何在 MorphPivot 中定义 belongsTo?
- react-native - 具有相同状态名称的多个组件,如何更改一个组件的一种状态而不影响其他组件?
- reporting-services - 是否可以将 SSRS 用于 Progress OpenEdge 数据库?
- hyperledger-fabric - Fabric-CA-Server,使用密码验证用户
- ios - 获取:“在演示或关闭过程中尝试从视图控制器中关闭”
- http - 如何查找页面重定向到的 URL