如何在 Flutter 中使用 JSON 正文发出 http DELETE 请求?
Posted
技术标签:
【中文标题】如何在 Flutter 中使用 JSON 正文发出 http DELETE 请求?【英文标题】:How to make an http DELETE request with JSON body in Flutter? 【发布时间】: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请求并获得响应。
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于如何在 Flutter 中使用 JSON 正文发出 http DELETE 请求?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:为 Http GET 请求发送 JSON 正文
在 POST 请求的 Body Flutter 中添加整个 JSON 数据
如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?
如何在使用 Cloud Scheduler 发出的 HTTP POST 请求上添加 JSON 正文?它会添加“Content-Type”:“application/json”标头吗?