Dart中如何使用POST方法?请求变量无法发送到服务端问题求解
问题原因
你已经构造好了请求参数body,但调用http.post()方法时没有将body作为参数传入,因此所有你定义的变量都没有被提交到服务端。
其他潜在问题
- 你从SharedPreferences中取值时,
toke和ide都使用了mykey作为key读取,大概率是逻辑错误,正常情况下用户id和接口鉴权token会存在不同的key下,会导致CustomerId参数取值错误 - 没有配置对应的
Content-Type请求头,服务端可能无法正确解析你提交的参数格式,如果你提交的是JSON格式参数,还需要提前将Map类型的body转为JSON字符串
修正后代码
首先确保你已经导入了dart:convert库,参考下方代码修改即可:
import 'dart:convert'; // 其余原有导入保持不变 _sendBuyBtnReq( {required BuildContext context, required String Amount, required String ScoreAmount}) async { final prefs = await SharedPreferences.getInstance(); // 注意修改为你实际存储token和用户id对应的SharedPreferences key var toke = prefs.getString('你存储token的key'); var ide = prefs.getString('你存储用户id的key'); final url = Uri.parse('my url'); var body = Map<String, dynamic>(); body["CustomerId"] = '$ide'; body["Amount"] = '$Amount'; body["Credit"] = '$ScoreAmount'; body["Description"] = '2'; http.Response response = await http.post( url, headers: { 'X-Requested-With': 'XMLHttpRequest', 'Authorization': 'Bearer $toke', // 服务端要求JSON格式参数就保留下面这个配置 'Content-Type': 'application/json; charset=UTF-8', // 如果服务端要求表单格式参数,就替换成下面这个配置 // 'Content-Type': 'application/x-www-form-urlencoded', }, // 新增body参数,JSON格式需要用jsonEncode转换,表单格式直接传body变量即可 body: jsonEncode(body), ); if (response.statusCode == 200) { print(response.body.toString()); } else { print(response.reasonPhrase); var messageM = jsonDecode(utf8.decode(response.bodyBytes)); var MessageModel = messageModel(messageM['message']); showSnackBar7(context, MessageModel.message); } }
内容的提问来源于stack exchange,提问作者Navid Shokoufeh
相关产品推荐
相关产品推荐

