DioError [DioErrorType.RESPONSE]: Http 状态错误 [405] [已解决]
Posted
技术标签:
【中文标题】DioError [DioErrorType.RESPONSE]: Http 状态错误 [405] [已解决]【英文标题】:DioError [DioErrorType.RESPONSE]: Http status error [405] [Solved] 【发布时间】:2020-04-18 15:42:17 【问题描述】:我正在创建一个post
请求使用Dio,
这是我的FormData
参数,
FormData formData = FormData.fromMap(
'wallet_id': '$dropdownValue.walletId',
'member_id': '$_loginModel.memberId',
'draw_amount': withdrawalAmountContoller.text,
'login_password': passwordController.text,
);
然后我像这样传递params
,
Response response = await dio.post(url, data: params);
但我收到一个错误请求,
ERROR[DioError [DioErrorType.RESPONSE]: Http 状态错误 [405]] => PATH: https://vertoindiapay.com/pay/api/withdraw
E/flutter (6703): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] 未处理异常:DioError [DioErrorType.RESPONSE]: Http 状态错误 [405]
E/flutter (6703):#0 DioMixin._request._errorInterceptorWrapper。 (包:dio/src/dio.dart:848:13)
请帮我解决这个问题。 我的网址是=> https://vertoindiapay.com/pay/api/withdraw
虽然这在邮递员中工作正常,
【问题讨论】:
我已经解决了这个问题,这是一个愚蠢的错误 你是如何解决这个问题的?请提及,以便未来的读者可能会发现它有帮助。谢谢! @RavinderKumar 是什么错误?,我收到错误 500,bt in postman 我收到响应成功.. @ajs.sonawane 我忘了是什么解决了这个问题,但可能某些值为 null 或响应数据已经在 json 中,我再次对其进行编码和解码,无论如何,如果您遇到内部服务器错误,也许您应该检查任何参数都不应该有任何空格。 【参考方案1】:我遇到了同样的错误,问题来自您的服务器。您对服务器的操作可能是获取数据 [FromBody] 使用 [FromForm] 它会起作用。
对我来说,我是这样解决的:
eg public DataResponseModel<UserDto> UpdateFormalize([FromForm] FormalizeDto dto)
//somes code
【讨论】:
【参考方案2】:当您期望的响应(以 JSON 格式)与您期望接收的响应不匹配时,就会出现此特定问题。
如果这是你的代码,
Response response = await dio.post(url, data: params);
检查响应模型是否与它在 Postman 响应中收到的 JSON 匹配。
【讨论】:
【参考方案3】: Future<void> signUpUser() async
final formData =
'username': 'test1',
'password': 'abcdefg',
'grant_type': 'password',
;
try
Dio _dio = new Dio();
_dio.options.contentType = Headers.formUrlEncodedContentType;
final responseData = await _dio.post<Map<String, dynamic>>('/token',
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>,
baseUrl: 'http://52.66.71.229/'),
data: formData);
print(responseData.toString());
catch (e)
final errorMessage = DioExceptions.fromDioError(e).toString();
print(errorMessage);
class DioExceptions implements Exception
DioExceptions.fromDioError(DioError dioError)
switch (dioError.type)
case DioErrorType.CANCEL:
message = "Request to API server was cancelled";
break;
case DioErrorType.CONNECT_TIMEOUT:
message = "Connection timeout with API server";
break;
case DioErrorType.DEFAULT:
message = "Connection to API server failed due to internet connection";
break;
case DioErrorType.RECEIVE_TIMEOUT:
message = "Receive timeout in connection with API server";
break;
case DioErrorType.RESPONSE:
message =
_handleError(dioError.response.statusCode, dioError.response.data);
break;
case DioErrorType.SEND_TIMEOUT:
message = "Send timeout in connection with API server";
break;
default:
message = "Something went wrong";
break;
String message;
String _handleError(int statusCode, dynamic error)
switch (statusCode)
case 400:
return 'Bad request';
case 404:
return error["message"];
case 500:
return 'Internal server error';
default:
return 'Oops something went wrong';
@override
String toString() => message;
【讨论】:
【参考方案4】:所以我遇到了这个问题。所以我发现你在 Postman 中使用的标题应该与你在 Dio 中使用的标题相匹配。比如说
headers:
'Accept': "application/json",
'Authorization': 'Bearer $token',
,
我的邮递员看起来像这样Postman
显然,Dio 在标题方面也表现得像邮递员,所以很明显,如果邮递员的标题不匹配,那么它将引发错误。
简而言之,Dio 会像邮递员一样自行推断内容类型。
【讨论】:
对我有用,伙计:)【参考方案5】:尝试传递内容类型
final response = await Dio().post(Url,
options: Options(contentType: 'multipart/form-data'), data: formData);
【讨论】:
【参考方案6】:我遇到了同样的错误,BaseOptions 有不同的 method
名称,而不是 POST
... 当我将它改回 POST
时,它起作用了。不确定 DIO 包是否接受使用 POST
以外的方法在 API 中调用 Post 方法。
【讨论】:
【参考方案7】:请尝试将参数作为 JSON 编码传递。
Response response = await dio.post(url, data: json.encode(params));
希望这会有所帮助!
【讨论】:
您是否将标头作为 JSON 与表单编码发送? @RayLi 从 OP 中发布的代码语法中可以明显看出他正在发送表单编码数据。以上是关于DioError [DioErrorType.RESPONSE]: Http 状态错误 [405] [已解决]的主要内容,如果未能解决你的问题,请参考以下文章
错误:DioError [DioErrorType.other]:SocketException:主机查找失败:未被捕获
颤振:异常 DioError [DioErrorType.DEFAULT]:类型 'String' 不是类型 'Map<String, dynamic>' 的子类型
Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段