如何在Flutter中使用JSON正文发出http DELETE请求?

时间:2019-07-27 19:33:30

标签: json http flutter dart

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

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

  

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

标题:

Content-Type : 'application/json',

token: 'my token',

jwt: ' my jwt'

身体

{

        "id":"4"

}

回复:

状态:“已删除”

因此,我需要使用上面提到的以下正文和标头进行有关DELETE请求,并且需要从JSON响应中将status的值保存在String中。在这里,我需要有关代码的帮助,以提出此​​删除请求。

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

2 个答案:

答案 0 :(得分:6)

您可以使用来自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();
}

答案 1 :(得分:0)

简短回答:

http删除请求不支持正文。通常,您只需在网址中使用标识符即可标识要删除的对象,例如:

删除api.com/entity/1234

1234是对象的ID。

长答案:

在您的情况下,您想要对该URL发出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);