我正在尝试从API获取数据。我需要在没有标题的邮递员中从正文传递值:不显示application / JSON数据。
final response = await http.post(
"http://192.168.10.25:8080/Login/validateusername",
body: {"username": "user@PYA"},
headers: {'Content-Type': 'application/json'},
);
错误消息:
E/flutter (28851): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter (28851): Bad state: Cannot set the body fields of a Request with content-type "application/json".
答案 0 :(得分:0)
使用http dart软件包
var data = {username:"username",password:"password"};
http.Response response = await http.post(
"yourApiroute",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: {"username": data.phone, "password": data.password});
答案 1 :(得分:0)
添加内容类型application/json
Future<String> apiRequest(String url, Map jsonMap) async {
HttpClient httpClient = new HttpClient();
HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
request.headers.set('content-type', 'application/json');
request.add(utf8.encode(json.encode(jsonMap)));
HttpClientResponse response = await request.close();
// todo - you should check the response.statusCode
String reply = await response.transform(utf8.decoder).join();
httpClient.close();
return reply;
}
答案 2 :(得分:0)
var json = jsonCodec.encode(data);
print("json=$json");
var url = "http:yourAPIrouter.com/etc";
var response = await http.post(
url,
headers:{ "Accept": "application/json" } ,
body: { "json": '$json'},
encoding: Encoding.getByName("utf-8")
);
不要忘记在邮递员中添加密钥
"json"
答案 3 :(得分:0)
使用内容类型“ application / json”将主体简单编码为json对象
http.Response response = await http.post( uri , headers: headers, body: JsonEncoder().convert(body));
答案 4 :(得分:0)
我做的差不多。但是,我尝试避免像您的情况那样进行后端操作。我只是做了一个最小的php请求,所以我不会浪费或耐心地学习开发用户管理控制器所需的内容。
但是,我遇到了Flutter独自无法解决的一些局限性和问题。经过一番否认,我尝试了一下。 Lumen是Laravel框架的简化版本,提供了一些教程和一些过去的经验,我最终意识到API应该承载大多数身份验证,而不是应用程序本身。我离题了。
在我的情况下,http帖子的功能代码为:
Future<Post> createPost() async {
final url = "http://localhost:8000/api/login";
Map<String, String> body = {
'user': user.text,
'pass': pass.text,
};
await http.post(url, body: body);
print(body);
return http.;
}
我首先将其转换为地图。与解析json相比,我更喜欢这种方法,因为如果需要添加更多变量,只需将地图放大即可。
我只是有一个问题:您的http://192.168.10.25:8080/Login/validateusername是什么样的?我认为无需指定您的身体解析的信息类型。
答案 5 :(得分:0)
另一种简单的方法如下
import 'package:http/http.dart' as http;
String body = json.encode({
'foo': 'bar',
'complex_foo' : {
'name' : 'test'
}
});
http.Response response = await http.post(
url: 'https://example.com',
headers: {"Content-Type": "application/json"},
body: body,
);