flutter:Content-type必须是application / json

问题描述 投票:0回答:2

我遇到了http post请求的问题。我得到响应'Content-type必须是application / json',但是我设置标题以指定内容是json类型。

const Map<String, String> header = {
  'Content-type': 'application/json',
  'Accept': 'application/json',
};

static void init() async {
    var body =
      {
        "username": username, // String username defined above
        "password": password, // String password defined above
      };

    var response = await http.post(url, body: json.encode(body), headers: header);
    print(response.body);
}

如上所述,我希望这可以工作并返回一个有效的json响应,但是我收到的错误代码为400,消息'Content-type必须是application / json'。我不太确定如何解决这个问题,我已经使用这种方法在其他时间提供http.Post请求并且它始终有效。

http dart flutter
2个回答
2
投票

对于所有想知道的人,理查德·希普在上面的评论中是对的,下到基地HttpClient解决了这个问题。 (我不确定如何给他答案,如果有人知道请告知我这样做)。

下面是我用于获取代码以用于文档编制的代码片段

static void init() 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(rawBody)));
    HttpClientResponse response = await request.close();
    String reply = await response.transform(utf8.decoder).join();
    var jsonReply = json.decode(reply);
    httpClient.close();
}

这给了我所需要的回复,非常感谢理查德,我从来没有想过要作为一个新用户来喋喋不休。


0
投票

1。如果您使用的是http.post,则无需再次指定application / json标头。你可以尝试删除标题:标题。 2DO。请仔细检查身体是否为json格式。 使用http.post的简单示例

              const Map<String, String> header = {
                'Content-type': 'application/json',
                'Accept': 'application/json',
              };
              var res = await http.post(
                  'https://jsonplaceholder.typicode.com/posts',
                  body: {'title': 'foo', 'body': 'bar', 'userId': '222110011'});
              print(res.body);

看到我没有发送http标头。 希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.