J'essaie d'obtenir des données de l'API. J'ai besoin de transmettre la valeur du corps, dans postman sans en-tête: les données d'application / JSON ne sont pas affichées.
E/flutter (28851): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception: E/flutter (28851): Bad state: Cannot set the body fields of a Request with content-type "application/json".
Message d'erreur:
final response = await http.post(
"http://192.168.10.25:8080/Login/validateusername",
body: {"username": "user@PYA"},
headers: {'Content-Type': 'application/json'},
);
5 Réponses :
utilisez le package http dart
var data = {username:"username",password:"password"};
http.Response response = await http.post(
"yourApiroute",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: {"username": data.phone, "password": data.password});
Erreur: Dart Erreur: exception non gérée: E / flutter (26853): état incorrect: impossible de définir les champs de corps d'une requête avec le type de contenu "application / json".
Ajoutez le type de contenu application/json
Future<String> apiRequest(String url, Map jsonMap) async {
HttpClient httpClient = new HttpClient();
HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
request.headers.set('content-type', 'application/json');
request.add(utf8.encode(json.encode(jsonMap)));
HttpClientResponse response = await request.close();
// todo - you should check the response.statusCode
String reply = await response.transform(utf8.decoder).join();
httpClient.close();
return reply;
}
Erreur: état incorrect: impossible de définir les champs de corps d'une requête avec le type de contenu "application / json".
ça marche ... Mais la valeur de retour est une chaîne ... comment obtenir une par une valeur de passage
Vous pouvez modifier la chaîne en fonction de l'exigence souhaitée
peut me dire comment faire
J'ai une classe de modèle pour mon json ... myjson ressemble à ceci, {username ":" abc "}}
Comment valider? peut donner l'exemple? J'ai utilisé votre méthode. Cela fonctionne très bien. Mais lorsque la connexion a perdu un message d'erreur à venir. COMMENT VALIDER?
var json = jsonCodec.encode(data);
print("json=$json");
var url = "http:yourAPIrouter.com/etc";
var response = await http.post(
url,
headers:{ "Accept": "application/json" } ,
body: { "json": '$json'},
encoding: Encoding.getByName("utf-8")
);
and dont forget add the key "json" in postman
Je ne peux pas changer mon backend
et vous pouvez également essayer Map toJson () {return {"username": _username, "password": _pass}; }
je veux utiliser des données brutes et non des données de formulaire
Vous pouvez utiliser Raw si vous souhaitez envoyer du texte brut ou JSON ou tout autre type de chaîne. Comme son nom l'indique, Postman envoie vos données de chaîne brutes telles quelles, sans modifications, vous pouvez utiliser cet exemple pour publier.
Je ne crée pas de back-end.
Encodez simplement le corps en objet json lorsque vous utilisez le type de contenu "application / json"
http.Response response = await http.post( uri , headers: headers, body: JsonEncoder().convert(body));
Je fais presque la même chose. Cependant, j'ai essayé d'éviter de faire du back-end, comme dans votre cas. Je viens de faire une requête php minimale pour ne pas perdre ni patience à apprendre ce qui est nécessaire pour développer un contrôleur de gestion des utilisateurs.
Cependant, j'ai été confronté à plusieurs limitations et problèmes que Flutter seul ne peut pas résoudre. Après un certain refus, j'ai fait un essai. Lumen, une version allégée du framework Laravel, quelques tutoriels et quelques expériences passées, j'ai finalement réalisé que l'API devrait porter la majeure partie de l'authentification, et non l'application elle-même. J'ai digressé.
Dans mon cas, le code de la fonction d'un message http est:
Future<Post> createPost() async {
final url = "http://localhost:8000/api/login";
Map<String, String> body = {
'user': user.text,
'pass': pass.text,
};
await http.post(url, body: body);
print(body);
return http.;
}
I first le convertir en une carte. Je préfère cette méthode à l'analyse de json, car en fin de compte, si j'ai besoin d'ajouter plus de variables, je fais juste agrandir la carte.
J'ai juste une question: qu'est-ce que votre http://192.168.10.25:8080/Login/validateusername ressemble à? Je pense qu'il n'est pas nécessaire de spécifier le type d'informations que votre corps analyse.
La question doit contenir le code qui montre ce que vous essayez d'accomplir et ce que vous avez essayé. Veuillez également expliquer quels sont les résultats réels et attendus.
@ GünterZöchbauer Avez-vous une solution à ma question?