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

C# Discussion :

Envoi d'une requête HTTP Put - Erreur 500


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 65
    Points : 35
    Points
    35
    Par défaut Envoi d'une requête HTTP Put - Erreur 500
    Bonjour,

    J'ai créer un web service, qui comporte un controlleur avec la méthode PUT que voici :

    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
     
    public HttpResponseMessage Put(ParamSite site)
            {
                using (DomopigEntities context = new DomopigEntities())
                {
                    context.ParamSite.Add(site);
     
                    int changes = context.SaveChanges();
     
                    if(changes > 0)
                    {
                        return Request.CreateResponse(HttpStatusCode.Created);
                    }
                    else
                    {
                        return Request.CreateResponse(HttpStatusCode.BadRequest);
                    }
                }
            }
    Lorsque je l'appel via Postman comme ceci :
    Nom : Capture.PNG
Affichages : 474
Taille : 45,3 Ko

    L'ajout fonctionne dans ma base.

    Cependant lorsque j'appel mon web service via mon code c# comme suit, j'obtiens une erreur 500 :
    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
     
    public async Task SendSiteAsync(string login, string mdp)
            {
                await Authentification(login, mdp);
                Uri uri = new Uri(String.Format("{0}" + "site", DomopigRestService.URL));
     
                IList<ISite> SitesAjoutes = await BusinessServices.SiteService.GetChangesAsync().ConfigureAwait(false);
                foreach(ISite site in SitesAjoutes)
                {
                    RemoteSite remote = new RemoteSite(site);
                    string json = JsonConvert.SerializeObject(remote);
                    HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
                    HttpResponseMessage response = await client.PutAsync(uri, content);
                    string code = response.StatusCode.ToString();
                }
            }
    Mon objet RemoteSite :
    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
     
    internal class RemoteSite
        {
            [DataMember(Name = "IdentifiantMarquageUniporc")]
            public string IdentifiantMarquageUniporc { get; set; }
     
            [DataMember(Name = "LibelleSite")]
            public string LibelleSite { get; set; }
     
            [DataMember(Name = "PoidsMoyenAnneePrecedente")]
            public double PoidsMoyenAnneePrecedente { get; set; }
     
            [DataMember(Name = "PourcentageGammeAnneePrecedente")]
            public decimal? PourcentageGammeAnneePrecedente { get; set; }
     
            [DataMember(Name = "PlusValueAnneePrecedente")]
            public decimal? PlusValueAnneePrecedente { get; set; }
     
            [DataMember(Name = "NombreAlertesTemperature")]
            public int NombresAlertesTemperature { get; set; }
     
            [DataMember(Name = "NombreAlertesAlimentation")]
            public int NombreAlertesAlimentation { get; set; }
     
            [DataMember(Name = "NombreAlertesPesee")]
            public int NombreAlertesPesee { get; set; }
     
            [DataMember(Name = "NombreAlertesMortalite")]
            public int NombreAlertesMortalite { get; set; }
     
            [DataMember(Name = "NombreAlertesVeterinaire")]
            public int NombreAlertesVeterinaire { get; set; }
     
            [DataMember(Name = "Etat")]
            public string Etat { get; set; }
     
            [DataMember(Name = "IDEleveur")]
            public Guid IDEleveur { get; set; }
     
            [DataMember(Name = "IDDernierBordereauAbattage")]
            public Guid? IDDernierBordereauAbattage { get; set; }
    Quelqu'un aurait une idée de l'origine de cette erreur ?

    Merci

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est quoi le message d'erreur complet ? Aussi fait un debug en mode pas a pas, et dis-nous de quelle ligne provident l'exception ?

    La comme ca, une hypothese est que dans la methode SendSiteAsync() tu ne passes pas le bon type d'objet a la methode Put(). On a pas assez d'elements pour en etre sur, mais Put() attend un objet de type ParamSite et on dirait que tu lui passes un objet de type RemoteSite (qui n'herite pas de ParamSite) et que tu transformes en string JSON puis en HttpContent.

    Bref, donnes-nous le message complet et la ligne, ca aidera peut-etre a y voir un peu plus clair.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Je n'ai pas de message d'erreur complet étant donné que cela fonctionne en debug.
    En prod (depuis le c#), j'ai une erreur 500 : internal server error.
    Du coup je ne sais pas de quelle ligne provient l'erreur ..

    Pour ce qui est de la méthode SendSiteAsync(), elle envoi un objet RemoteSite qui est égal a l'objet ParamSite du WebService.
    L'erreur ne proviens pas de l'objet que je transmet à la méthode Put(), car j'ai copier le Json obtenu via le C# sur Postman et que cela a fonctionné.

    J'ai pensé que l'erreur pouvait provenir de la conversion des dates, de la culture plus précisement.
    J'ai le code suivant pour convertir les dates provenant du JSON :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            public const string FormatStringRead = "yyyy-MM-dd HH:mm:ss";
     
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                reader.Value.ToString().Replace("T", " ");
                return Convert.ToDateTime(reader.Value.ToString()).ToString(FormatStringRead );
            }
    Je me suis dis que l'erreur pouvait provenir d'ici.
    Il serait possible qu'en local (donc Debug) la conversion fonctionne car la date est en francais, mais que cela ne fonctionne pas en prod car le serveur est en irlande et donc les dates en langue Anglaise.
    Est ce une bonne piste ?
    Si oui, comment puis je éviter cela ?

    Merci

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Maintenant que j'y repense, c'est vrai que tu es sur Azure. Est-ce que tes 2 instances (celle du site Web et celle du Web Service) peuvent communiquer entre elles ? C'est-a-dire, est-ce que tu as ouvert les ports (endpoints) entre les 2 ?

    Citation Envoyé par FlashBz Voir le message
    Je me suis dis que l'erreur pouvait provenir d'ici.
    Il serait possible qu'en local (donc Debug) la conversion fonctionne car la date est en francais, mais que cela ne fonctionne pas en prod car le serveur est en irlande et donc les dates en langue Anglaise.
    Est ce une bonne piste ?
    Si oui, comment puis je éviter cela ?
    A priori je ne pense pas, mais tu peux controler les cultures utilisees avec Thread.CurrentThread.CurrentCulture et/ou Thread.CurrentThread.CurrentUICulture.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    J'ai finalement pu identifier la source de mon erreur.

    Je travail en Entity Framework et j'avais supprimé quelques champs de mon modèle directement sur le web service, seulement ils n'avaient pas été supprimé dans la base.
    L'erreur provenait de l'un de ces champs qui n'acceptait pas de valeur null à l'insertion...

    Désolé du dérangement et merci beaucoup pour ton aide !

Discussions similaires

  1. Envoi d'une requête HTTP
    Par adslfx dans le forum Général Java
    Réponses: 3
    Dernier message: 25/09/2011, 19h14
  2. Envoi d'une requête HTTP
    Par adslfx dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 25/09/2011, 18h26
  3. Envoi d'une requête HTTP POST
    Par Alexey dans le forum Langage
    Réponses: 4
    Dernier message: 10/05/2009, 20h35
  4. Erreur 500 lors d'une requête http
    Par Sh4dow49 dans le forum Langage
    Réponses: 2
    Dernier message: 30/10/2008, 11h47
  5. Envoi d'une requête HTTP
    Par jpean.net dans le forum Web & réseau
    Réponses: 2
    Dernier message: 16/05/2008, 08h38

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