IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Parametre toujours null lors d'un POST vers un controlleur MVC


Sujet :

ASP.NET MVC

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut Parametre toujours null lors d'un POST vers un controlleur MVC
    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 :
    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);
            }
        }
    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
    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;
    		}
    Dans cet extrait, j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = "{\"test\":\"coucou\"}";
    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 = "{'':\"coucou\"}";
    ou même simplement . enfin bref, j'ai tenté beaucoup de formats, tout en variant les "content-type" mais rien n'y fait :
    - 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
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    C'est ton utilisation de web request qui est pas bonne, regarde ce lien pour le formattage des parametres:

    https://technet.rapaport.com/Info/Pr...l_Example.aspx

  3. #3
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Tu trouve sur ce lien un exemple de WebAPI ASP RESET avec ASP.NET
    http://www.asp.net/web-api/overview/...aspnet-web-api

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    OMG !!

    Merci mermich,

    en fait il m'a fallu changer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    urlConnection.SetRequestProperty("Content-Type", "application/json");
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    urlConnection.SetRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine = "{\"test\":\"coucou\"}";
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine = "=coucou";
    j'avais déjà testé ces paramètres, mais je n'avais jamais testé les deux en même temps
    (soit je passais encore les parametres en format json, soit je mettais le "test=coucou" (le 'test' est en trop...))

    Tant de temps perdu pour si peu

    Merci beaucoup et passe un bon Week-end
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Citation Envoyé par charouel Voir le message
    Tu trouve sur ce lien un exemple de WebAPI ASP RESET avec ASP.NET
    http://www.asp.net/web-api/overview/...aspnet-web-api
    Salut charouel,
    je m'étais basé sur ce lien pour créer mon service web,
    mais en fait c'est au niveau du format de mon paramètre coté client que ça déconnait.

    Merci pour ton post et bon week-end
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/07/2013, 12h39
  2. Pointeur en parametre de sortie : toujours NULL !
    Par Ange_blond dans le forum C++
    Réponses: 6
    Dernier message: 16/04/2009, 16h47
  3. Erreur lors du post vers la meme page!
    Par ozzmax dans le forum Langage
    Réponses: 10
    Dernier message: 23/01/2006, 19h16
  4. Réponses: 6
    Dernier message: 17/06/2005, 14h40
  5. Réponses: 13
    Dernier message: 16/04/2004, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo