Salut,
habituellement dev en Windows form, je suis chargé de créer une appli pour Android (en c#).
Afin de communiquer avec la BDD de l'entreprise, j'ai choisi d'utiliser la techno MVC pour créer un service web REST.
Malgré mes (TRES) nombreuses lectures sur un tas de forums, je n'ai pas trouvé de solution à mon problème :
J'ai beau envoyer ce que je veux comme paramètre à mon service Web, la variable en entrée reste toujours NULLe.
Voici le code de mon Controller :
Voici mon code du coté client Android :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class Ajoute_VisiteController : ApiController { //[HttpPost] public object Post([FromBody]string test) { if (test == null) return Request.CreateResponse(HttpStatusCode.OK, "L'argument est NULL"); else if (test == string.Empty) return Request.CreateResponse(HttpStatusCode.OK, "L'argument est vide"); else return Request.CreateResponse(HttpStatusCode.OK, "Envoi = " + test); } }
Dans cet extrait, j'ai mis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public static string Envoie_Chaine_ServiceWeb(string chaine, string URL_ServiceWeb) { HttpURLConnection urlConnection = null; URL url; url = new URL(URL_ServiceWeb); string retour = string.Empty; chaine = "{\"test\":\"coucou\"}"; try//Envoi { urlConnection = (HttpURLConnection) url.OpenConnection(); urlConnection.RequestMethod = "POST"; urlConnection.SetRequestProperty("Content-Type", "application/json; charset=UTF-8"); urlConnection.DoInput = true; urlConnection.DoOutput = true; Stream os = urlConnection.OutputStream; PrintWriter pw = new PrintWriter(os); pw.Print(chaine); pw.Close(); } catch(Exception ex) { throw new Exception("Erreur Lors de l'envoi : " + ex.Message); } try { HttpStatus status = urlConnection.ResponseCode; DataInputStream erd = new DataInputStream(urlConnection.ErrorStream); if (status != HttpStatus.Ok) { string ligneErr = string.Empty; while((ligneErr = erd.ReadLine()) != null) { retour += ligneErr; } erd.Close(); } DataInputStream rd = new DataInputStream(urlConnection.InputStream); string ligne = string.Empty; while((ligne = rd.ReadLine()) != null) { retour += ligne; } rd.Close(); } catch(Exception ex) { throw new Exception("Erreur Lors de la réception de la réponse : " + ex.Message); } return retour; }mais j'ai testé avec bien d'autres formats, sur un site j'ai vu qu'il fallait utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part chaine = "{\"test\":\"coucou\"}";
ou même simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part chaine = "{'':\"coucou\"}";
. enfin bref, j'ai tenté beaucoup de formats, tout en variant les "content-type" mais rien n'y fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part =coucou
- l'envoi se passe bien
- le status du ResponseCode est bien à OK
- je récupère bien une chaine en retour mais c'est toujours celle-ci : "L'argument est NULL" (voir le code de mon Controller).
J'ai bien vu que pas mal de gens avaient cette erreur de paramètre null quand ils débutaient en MVC, mais aucune solution n'a corrigé mon problème
Si quelqu'un a une idée, je lui serais très reconnaissant
Partager