我想在 dart 中使用 http GET 请求发送参数。这里的第一个答案很好地展示了它:如何向 Dart http 请求添加查询参数?
var uri =
Uri.https('www.myurl.com', '/api/query', queryParameters);
Run Code Online (Sandbox Code Playgroud)
然而,一个主要的问题是 queryParameters 只接受:
Map<String, String>
Run Code Online (Sandbox Code Playgroud)
这不允许我传入列表/数组。
如果我将 get 请求更改为 post 请求,我可以轻松地发送一个正文(作为 json 编码的字符串),如 flutter 文档所述:https : //pub.dev/documentation/http/latest/http/post .html
post(url, {Map<String, String> headers, body, Encoding encoding})
Run Code Online (Sandbox Code Playgroud)
但是,get 请求对于查询参数没有这样的等效参数:https : //pub.dev/documentation/http/latest/http/get.html
get(url, {Map<String, String> headers})
Run Code Online (Sandbox Code Playgroud)
我还尝试将查询参数直接添加到 url 中,如下所示:
get('www.myurl.com/api/query/?array[]=value1&array[]=value2&array[]=value3)
Run Code Online (Sandbox Code Playgroud)
但是当我在服务器中收到方括号 [] 时,它总是会转换为 %5B%5D 。
任何帮助表示赞赏。谢谢
事实上,queryParameter需要Map<String, dynamic>. 检查源代码:
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;
Run Code Online (Sandbox Code Playgroud)
的dynamic可以是一个String或一个Iterable<String>。所以,
var uri = Uri(
scheme: 'http',
host: 'www.myurl.com',
path: '/api/query/',
queryParameters: {
'array': ['value1', 'value2', 'value3'],
},
);
print(uri);
Run Code Online (Sandbox Code Playgroud)
印刷:
http://www.myurl.com/api/query/?array=value1&array=value2&array=value3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3976 次 |
| 最近记录: |