【问题标题】:Flutter Dio post an object with arrayFlutter Dio 发布一个带有数组的对象
【发布时间】:2020-05-01 12:49:22
【问题描述】:

我正在尝试向 api 发送一个对象为“的请求”

var params =  {
    "item": "itemx",
    "options": [1,2,3],
    };
    print(params);
    try {
      Response response = await _dio.post(getAddToCartURL,
          queryParameters: params,
          options: Options(headers: {
            HttpHeaders.contentTypeHeader: "application/json",
          }));

    } catch (error, stackTrace) {
      print("Exception occurred: $error  stackTrace: $stackTrace");
      return false;
    }

Dio 将对象发送为:

POST /api/add-to-cart/?item=itemx&options%5B%5D=1&options%5B%5D=2&options%5B%5D=3 

其中 api 将其识别为错误请求。

我在这里做错了什么?我什至尝试将列表设为[“1”,“2”,“3”],它是一样的。

【问题讨论】:

    标签: http flutter dart dio


    【解决方案1】:

    这完全取决于 API 的预期方式。我建议尝试将其编码为 JSON。

    var params =  {
      "item": "itemx",
      "options": jsonEncode([1,2,3]),
    };
    

    但在查询参数中发送复杂数据并不总是那么容易。由于您无论如何都在使用 POST,因此可能会发送一个 JSON 对象作为正文而不是使用查询参数。

    var params =  {
      "item": "itemx",
      "options": [1,2,3],
    }; 
    ...
    Response response = await _dio.post(getAddToCartURL,
      options: Options(headers: {
        HttpHeaders.contentTypeHeader: "application/json",
      }),
      data: jsonEncode(params),
    );
    

    【讨论】:

    • 感谢您的提示,它确实有效。我认为将参数作为对象发送就足够了,但是当我尝试将身份验证参数发送到同一个 api 时。谢谢
    • 我们不能在 get 方法中发送这种类型的数组吗?
    • GET 请求没有正文,数据必须放在 URL 参数中。一般来说,这可能很棘手,但绝对有可能。第一个代码 sn-p 建议使用 GET 的方式,第二个 sn-p 用于使用 POST,这通常是更好的选择,但您也需要在服务器端进行更改
    • 好例子...
    猜你喜欢
    • 2021-03-01
    • 2022-01-15
    • 2019-06-09
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多