【问题标题】:How to make an http DELETE request with JSON body in Flutter?如何在 Flutter 中使用 JSON 正文发出 http DELETE 请求?
【发布时间】:2019-12-05 17:00:03
【问题描述】:

在颤振项目中,我想使用 JSON 正文执行 DELETE 请求。但是,每当我尝试使用 http.delete 方法时,它都会向我展示 - 未定义命名参数“body”。

这是我的 API 删除请求示例-

url: 'BASE_URL'+注释/删除;

标题:

Content-Type : 'application/json',

token: 'my token',

jwt: ' my jwt'

主体:

{

        "id":"4"

}

回应:

状态:“已删除”

因此,我需要使用上面提到的以下正文和标头发出有关 DELETE 请求,并且从 JSON 响应中我需要将状态值保存在字符串中。在这里,我需要代码方面的帮助来发出这个删除请求。

请告知整个过程以上述方式发出DELETE请求并获得响应。

【问题讨论】:

    标签: json http flutter dart


    【解决方案1】:

    您可以使用来自 http 包的请求:

    import 'package:http/http.dart' as http;
    import 'dart:convert';
    
    Future<String> deleteWithBodyExample() async {
      final baseUrl = "baseUrl";
      final url = Uri.parse(baseUrl + "notes/delete");
      final request = http.Request("DELETE", url);
      request.headers.addAll(<String, String>{
        "Accept": "application/json",
        "token": "my token",
        "jwt" : "my jwt"
      });
      request.body = jsonEncode({"id": 4});
      final response = await request.send();
      if (response.statusCode != 200)
        return Future.error("error: status code ${response.statusCode}");
      return await response.stream.bytesToString();
    }
    

    【讨论】:

      【解决方案2】:

      简答:

      http 删除请求不支持正文。通常,您只需在 url 中使用标识符来标识要删除的对象,如下所示:

      删除 api.com/entity/1234

      1234 是对象的 ID。

      长答案:

      在您的情况下,您想向该网址发出 POST 请求。

      有一个 dart 包为 http 请求提供了一些帮助类。

      Github:https://github.com/Ephenodrom/Dart-Basic-Utils 安装它:

      dependencies:
        basic_utils: ^1.4.0
      

      用法

      Map<String, String> headers = {
        "Accept": "application/json",
        "token": "my-token", 
        "jwt" : "my-jwt" 
      };
      
      String URL = BASE_URL+"notes/delete" ;
      
      String body = "{\"id\":\"4\"}" 
      Map<String, dynamic> dataAsJson = await HttpUtils.postForJson(url,body,
            headers: headers);
      

      附加信息:

      这些都是来自 HttpUtils 类的方法。

      Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
      Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
      Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
      Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
      Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
      Map<String, dynamic> getQueryParameterFromUrl(String url);
      String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
      

      【讨论】:

        猜你喜欢
        • 2015-11-03
        • 2017-01-23
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        • 2019-02-13
        • 2018-01-26
        • 1970-01-01
        相关资源
        最近更新 更多