【问题标题】:Flutter HTTP GET request not working with body as a parameterFlutter HTTP GET请求不使用body作为参数
【发布时间】:2020-10-20 13:15:57
【问题描述】:

我有一个 REST API,它接收带有 JSON 正文的 GET 请求:

{
    "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 输入的 REST API 发出 GET 请求的正确方法是什么?

【问题讨论】:

    标签: json rest http flutter dart


    【解决方案1】:

    这是因为,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,
    );
    
    }
    
    

    【讨论】:

      【解决方案2】:

      试试

      body: json.decode(reqBody.body),
      

      而不是 body: jsonEncode(reqBody) 在您的代码中。

      【讨论】:

      • 不起作用。错误是命名参数body没有退出方法get
      【解决方案3】:

      有时您无法控制需要一些数据的 API GET 端点。这是黑客:

      将数据作为参数添加到 URL。 例如:

      String reqURL = "${my_base_url}details?user_id=${user.id}";
      

      【讨论】:

      • 这对我有用。但是为什么呢?
      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2013-09-25
      • 2015-02-03
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多