问题描述
我是Flutter编程和工作的新手。我正在尝试使用发布请求登录到API。
模型(用于app.quicktype.io)
import 'dart:convert';
class UserLogin {
UserLogin({
this.login,this.password,this.entity,this.reset,});
String login;
String password;
String entity;
int reset;
factory UserLogin.fromrawJson(String str) =>
UserLogin.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory UserLogin.fromJson(Map<String,dynamic> json) => UserLogin(
login: json["login"],password: json["password"],entity: json["entity"],reset: json["reset"],);
Map<String,dynamic> toJson() => {
"login": login,"password": password,"entity": entity,"reset": reset,};
}
String loginJason = json.encode(
UserLogin(login: login,password: password,entity: "",reset: 0));
请求:
static Future apiLogin(
String url,String login,String password,String loginJason) async {
var response = await http.post(url,headers: {'Content-Type': 'application/json'},body: loginJason);
请求的正文应如下所示:
{"login":"login","password":"password","entity": "","reset" 0
}
在密码中使用特殊字符(例如“ 123 @ abc”)之前,一切正常,然后dart像这样对主体进行编码:
{"login":"login","password":"123%40abc","reset" 0
}
该密码不再有效,因为该密码已重新格式化(Html-Escape)。如何防止重新格式化密码。
解决方法
Uri.decodeComponent(“ 123%40abc”)= 123 @ abc
,如果您想使用 Http (Flutter) 将 # 或 @ 相关字符串发送到服务器,则大多数问题与 # 或 @ 字符有关,您可以这样做:
Uri.encodeComponent("example@#");
从服务器获取数据使用:
Uri.decodeComponent("example@#");
主要是特殊字符需要的Uri编码/解码