Dart注册接口始终返回500状态码,请求协助排查修复
解决Dart注册接口返回500错误问题
问题描述
Dart代码调用注册接口始终返回response.statusCode=500,但Postman调用该接口正常工作。相关代码如下:
完整代码
import 'dart:convert'; import 'package:try/models/user_model.dart'; import 'package:http/http.dart' as http; class AuthService { String baseUrl = '10.0.2.2'; Future<UserModel> register({ String? name, String? username, String? email, String? password, }) async { var url = Uri.http(baseUrl, '/try-backend/public/api/register'); var headers = { 'Content-Type': 'application/json', 'Accept': 'application/json', }; var body = jsonEncode({ 'name': name, 'username': username, 'email': email, 'password': password, }); http.Response response = await http.post( url, headers: headers, body: body, ); print(response.body.toString()); if (response.statusCode == 200) { var data = jsonDecode(response.body)['data']; print(data); UserModel user = UserModel.fromJson(data['user']); user.token = 'Bearer ' + data['access_token']; return user; } else throw Exception('failed' + response.statusCode.toString()); } }
排查与解决方案
校验必填参数是否非空
代码中所有参数都是String?可选类型,若调用register时某个后端必填参数传了null,会导致后端抛出异常返回500。可添加参数校验:if (name == null || username == null || email == null || password == null) { throw Exception('必填参数不能为空'); }对齐Postman与Dart的请求头
检查Postman中的请求头是否与Dart代码完全一致,比如Postman可能自动携带User-Agent等额外头信息,可将Postman的请求头完整复制到Dart代码中测试。解析response.body的错误详情
你已添加print(response.body.toString());,仔细查看打印内容,后端通常会在500响应中返回具体错误堆栈或原因(如数据库报错、参数格式不匹配),根据该信息定位问题。确认URL完全匹配
Uri.http默认使用80端口,若后端服务使用其他端口,需在baseUrl中补充端口,例如10.0.2.2:8000,确保与Postman中的请求URL完全一致。检查JSON编码格式
打印body变量,对比Postman中的请求体,确认字段名大小写、参数格式是否与后端要求完全匹配,避免因JSON编码差异导致后端解析失败。
内容的提问来源于stack exchange,提问作者Aizen
相关产品推荐
相关产品推荐

