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

Services Web Discussion :

Web API Asp.Net JSON Erreur 500


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Par défaut Web API Asp.Net JSON Erreur 500
    Bonjour à tous.
    Voici mon problème.

    J'ai crée une Web API Asp.Net qui permet d'enregistrer des données dans deux tables sql server. (tables Prelevement, DetailsPrelevement)
    voici les models
    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
    59
    60
    61
    62
     
    /// Prelevement
    namespace LIMS24092022.Models
    {
        public partial class Prelevement
        {
            public Prelevement()
            {
                DetailsPrelevements = new HashSet<DetailsPrelevement>();
            }
     
            public int Id { get; set; }
            public DateTime DatePrelevement { get; set; }
            public DateTime? HeureDebPrelevement { get; set; }
            public DateTime? HeureFinPrelevement { get; set; }
            public DateTime? HeureSortie { get; set; }
            public int? EquipementPrelevId { get; set; }
            public int? SiteclientId { get; set; }
            public int? EchneurId { get; set; }
            public int? NbreLot { get; set; }
            public DateTime? DateConstitution { get; set; }
            public DateTime? HeureDebConstitution { get; set; }
            public DateTime? HeureFinConstitution { get; set; }
            public DateTime? DateTamisage { get; set; }
            public DateTime? HeureDebTamisage { get; set; }
            public DateTime? HeureFinTamisage { get; set; }
            public DateTime? DateQuartage { get; set; }
            public DateTime? HeureDebQuartage { get; set; }
            public DateTime? HeureFinQuartage { get; set; }
            public int? EquipementCartageId { get; set; }
            public DateTime? DateQuadrillage { get; set; }
            public DateTime? HeureDebQuadrillage { get; set; }
            public DateTime? HeureFinQuadrillage { get; set; }
            public int? EquipementQuadrillageId { get; set; }
            public DateTime? DateConditionnement { get; set; }
            public DateTime? HeureDebConditionnement { get; set; }
            public DateTime? HeureFinConditionnement { get; set; }
            public int? EmballageId { get; set; }
            public int? ExpedId { get; set; }
            public int? PorteurId { get; set; }
            public int? TransportId { get; set; }
            public int? MatiereId { get; set; }
            public string Description { get; set; }
            public string Elements { get; set; }
            public int? ClientId { get; set; }
            public int? LotId { get; set; }
            public DateTime? DateExp { get; set; }
            public DateTime? Servertime { get; set; }
            public int? CreatedBy { get; set; }
            public DateTime? CreatedOn { get; set; }
            public int? UpdatedBy { get; set; }
            public DateTime? UpdatedOn { get; set; }
            public int? LaboId { get; set; }
            public int? TypedocId { get; set; }
            public int? Oldid { get; set; }
            public string Workorder { get; set; }
     
            public virtual Client Client { get; set; }
            public virtual Labo Labo { get; set; }
            public virtual ICollection<DetailsPrelevement> DetailsPrelevements { get; set; }
        }
    }
    DetailsPrelevement

    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
     
    ///Details prelevement
    namespace LIMS24092022.Models
    {
        public partial class DetailsPrelevement
        {
            public DetailsPrelevement()
            {
                Ehcantillons = new HashSet<Ehcantillon>();
            }
     
            public int Id { get; set; }
            public int Idprelevement { get; set; }
            public string Refclient { get; set; }
            public int? CpId { get; set; }
            public double? QuantitePrelevee { get; set; }
            public double? PoidsSsm { get; set; }
            public double? PoidsClient { get; set; }
            public double? PoidsOcc { get; set; }
            public double? PoidsCeec { get; set; }
            public string ListeElements { get; set; }
            public DateTime? CreatedOn { get; set; }
            public int? CreatedBy { get; set; }
            public DateTime? UpdatedOn { get; set; }
            public int? UpdateBy { get; set; }
            public DateTime? TimeInserted { get; set; }
            public int? LaboId { get; set; }
            public int? Iddemande { get; set; }
            public int? Oldidprelevement { get; set; }
     
            public virtual Prelevement IdprelevementNavigation { get; set; }
            public virtual ICollection<Ehcantillon> Ehcantillons { get; set; }
        }
    }

    et le controller prelevement

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    namespace LIMS24092022.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class PrelevementsController : ControllerBase
        {
            private readonly APIContext _context;
     
            public PrelevementsController(APIContext context)
            {
                _context = context;
            }
     
            // GET: 
            [HttpGet]
            public async Task<ActionResult<IEnumerable<Prelevement>>> GetPrelevements()
            {
                return await _context.Prelevements.ToListAsync();
            }
     
            // GET: 
            [HttpGet("{id}")]
            public async Task<ActionResult<Prelevement>> GetPrelevement(int id)
            {
                var prelevement = await _context.Prelevements.FindAsync(id);
     
                if (prelevement == null)
                {
                    return NotFound();
                }
     
                return prelevement;
            }
     
            // PUT: 
            // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
            [HttpPut("{id}")]
            public async Task<IActionResult> PutPrelevement(int id, Prelevement prelevement)
            {
                if (id != prelevement.Id)
                {
                    return BadRequest();
                }
     
                _context.Entry(prelevement).State = EntityState.Modified;
     
                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PrelevementExists(id))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
     
                return NoContent();
            }
     
            // POST: 
            // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
            [HttpPost]
            public async Task<ActionResult<Prelevement>> PostPrelevement(Prelevement prelevement)
            {
                _context.Prelevements.Add(prelevement);
                await _context.SaveChangesAsync();
     
                return CreatedAtAction("GetPrelevement", new { id = prelevement.Id }, prelevement);
            }
     
            // DELETE: 
            [HttpDelete("{id}")]
            public async Task<IActionResult> DeletePrelevement(int id)
            {
                var prelevement = await _context.Prelevements.FindAsync(id);
                if (prelevement == null)
                {
                    return NotFound();
                }
     
                _context.Prelevements.Remove(prelevement);
                await _context.SaveChangesAsync();
     
                return NoContent();
            }
     
            private bool PrelevementExists(int id)
            {
                return _context.Prelevements.Any(e => e.Id == id);
            }
        }
    }

    Pendant les tests, avec Postman tout fonctionne bien, je peux enregistrer un prélevement avec plusieurs détails en une seule fois.

    Mais en production, je peux enregistrer un prélevement avec TROIS détails seulement.
    l'API revoie une erreur 500 lorsque j'essaie d'enregistrer un prélevement avec PLUS DE TROIS DETAILS PRELEVEMENT.

    Je n'arrive pas à déterminer le problème pour corriger.

    Pourriez-vous s'il vous plait m'aider.

    D'avance merci beaucoup.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Une erreur 500 survient lorsqu'une exception est levée dans ton code.
    Il peut y avoir tout un tas de raison pour laquelle cette exception est levée.

    Par rapport à ce que tu présentes j'opterai pour l'une de ce deux raisons :
    - Un objet nul
    - Un duplicate key dans la base
    - contraintes d'intégrités non respectées (notamment sur TypedocId et autre Id où aucune table n'est branchée)

    Mais le meilleur moyen de vérifier ce qui se passe est de trapper et logger l'exception.

Discussions similaires

  1. Créer la documentation des Web API ASP.NET Core avec Swagger
    Par Hinault Romaric dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 27/10/2020, 16h44
  2. Web API Asp.Net JSON complexe
    Par thorgal1612 dans le forum Services Web
    Réponses: 1
    Dernier message: 05/04/2019, 16h42
  3. Erreur avec: Menu <Site Web> <Configuration ASP.NET>
    Par PiPo123 dans le forum Visual Studio
    Réponses: 3
    Dernier message: 23/06/2011, 01h21

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