json - Flutter HTTP GET请求不使用body作为参数
问题描述
我有一个 REST API,它接收GET
带有 JSON 正文的请求:
{
"cart_only_items": true
}
和头部:
{
"Authorization": "Token my_auth_token",
}
并返回响应:
{
"items": [...]
}
这个 REST API 的GET
请求在邮递员上工作得很好。
所以,我尝试在 Flutter 中实现这个请求,如下所示:
import 'package:http/http.dart';
import 'dart:convert';
void getCart() async {
Map<String, String> reqHead = {
"Authorization": "Token my_auth_token",
};
Map<String, dynamic> reqBody = {"cart_only_items": true};
String reqURL = "${my_base_url}details/";
Response res = await get(
reqURL,
body: jsonEncode(reqBody),
headers: reqHead,
);
}
但是在上面的代码中,我得到了一个飞镖分析错误,例如:
error: The named parameter 'body' isn't defined. (undefined_named_parameter at [shoppingapp] lib/pages/Cart.dart:39)
那么,使用 Flutter 向需要 JSON 输入的 aGET
发出请求的正确方法是什么?REST API
解决方案
这是因为,GET请求不允许在正文中传递任何类型的数据。要传递数据,您必须在GET请求中使用POST请求或查询参数。
import 'package:http/http.dart' as http;
void getCart() async {
Map data = {
'key1': 1,
'key2': "some text"
}
String body = json.encode(data);
http.Response response = await http.post(
url: 'https://example.com',
headers: {"Content-Type": "application/json"},
body: body,
);
}
推荐阅读
- angular - 将 Angular 应用程序部署到 Azure Web 应用程序 Angular 9 的问题
- c# - 验证 URL 时出现“请求被中止:无法创建 SSL/TLS 安全通道”异常
- php - 检查单选按钮是否具有正确的数据库值
- java - Apache Ignite 中客户端的内存指标
- c# - c# Linq 比较具有相同文件名但没有扩展名的文件
- azure - 如何在实施 QA 自动化时克服 azure Active Directory MFA
- laravel-6 - 在 IIS 10 服务器中托管 Laravel 项目
- sockets - 如何在套接字中分配客户端端口?
- bash - 如何使用 bash/shell 脚本从文件的第一行删除一个单词
- android - ARCore:如何判断触摸事件是否落在 AugmentedImage 上?