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 :

Probl�me MVC WEB API [D�butant]


Sujet :

ASP.NET MVC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par d�faut Probl�me MVC WEB API
    Bonjour � tous,

    J'ai un probl�me avec du code g�n�r� sur ASP.NET MVC 4 WEB API (.net 4.5)
    J'ai g�n�r� mon api controller avec un crud sur entity framework.

    lorsque j'appel http://localhost:49350/API/appelOffreAPI , je tombe sur ce message d'erreur :

    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
    <Error><Message>Une erreur s’est produite.</Message>
     
    <ExceptionMessage>Échec de la sérialisation du corps de la réponse par le type « ObjectContent`1 » pour le type de contenu « application/xml; charset=utf-8 ».</ExceptionMessage>
     
    <ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace/><InnerException><Message>Une erreur s’est produite.</Message>
     
    <ExceptionMessage>Le type 'System.Data.Entity.DynamicProxies.appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872' avec le nom de contrat de données 'appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' n'est pas attendu. Utilisez un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer.</ExceptionMessage>
     
    <ExceptionType>System.Runtime.Serialization.SerializationException</ExceptionType><StackTrace>   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
       à WriteArrayOfappelOffreToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
       à System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType)
       à System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph)
       à System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6()
       à System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)</StackTrace></InnerException></Error>
    Voici le controller en question :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public class APIappelOffreController : ApiController
        {
            private GAOContainer db = new GAOContainer();
     
     
            // GET api/APIappelOffre
            public IEnumerable<appelOffre> GetappelOffres()
            {
                    var appeloffre = db.appelOffre.Include(a => a.entreprise).Include(a => a.statutAppelOffre).Include(a => a.source);
                    return appeloffre.AsEnumerable();
            }

    J'ai essay� d�j� de supprimer la cr�ation de proxy mais c'est utile visiblement pour la s�rialisation, et de supprimer le lazyloading sans r�sultat.

    Je vous remercie de votre aide.
    Cordialement.

  2. #2
    Membre �clair� Avatar de Nadinette
    Femme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Par d�faut
    Salut,

    Peux tu nous montrer la config de tes routes dans WebApiConfig.cs ?

    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par d�faut
    D�sol� pour cette r�ponse tardive mais voici le bout de code demand� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    A savoir qu'il est d'origine.

    Ce qui m'�tonne c'est que finalement �a plante alors que j'utilise uniquement du code g�n�r�.

    Merci � toi pour ton aide

  4. #4
    Membre �clair� Avatar de Nadinette
    Femme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Par d�faut Tu n'as pas l'impression qu'il manque quelque chose ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { controller = "MyController", id = RouteParameter.Optional }
                );
    Essayes avec �a en rempla�ant MyController par le nom de ta classe.

    ++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par d�faut
    Bonjour nadinette.

    J'ai une autre erreur avec cette route :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Error><Message>Une erreur s’est produite.</Message><ExceptionMessage>Échec de la sérialisation du corps de la réponse par le type « ObjectContent`1 » pour le type de contenu « application/xml; charset=utf-8 ».</ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace/><InnerException><Message>Une erreur s’est produite.</Message><ExceptionMessage>Le type 'System.Data.Entity.DynamicProxies.appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872' avec le nom de contrat de données 'appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' n'est pas attendu. Utilisez un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer.</ExceptionMessage><ExceptionType>System.Runtime.Serialization.SerializationException</ExceptionType><StackTrace>   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
       à WriteArrayOfappelOffreToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
       à System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
       à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType)
       à System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
       à System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph)
       à System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6()
       à System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)</StackTrace></InnerException></Error>

    Mais je ne pense pas que le probl�me soit la route de base.


    Merci � toi

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par d�faut
    J'ai pu r�soudre le probl�me mais sans vraiment comprendre pourquoi.

    Voila le contenu de la classe WebApiConfig:

    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
      public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
     
                // New code:
                var json = config.Formatters.JsonFormatter;
                json.SerializerSettings.PreserveReferencesHandling =
                    Newtonsoft.Json.PreserveReferencesHandling.Objects;
     
                config.Formatters.Remove(config.Formatters.XmlFormatter);
            }
        }
    Cela change les param�tres de s�rialisation pour du json plut�t que XLM ce qui correspond bien � ce que je veux faire.

    Par contre pour comprendre d�o� venait le probl�me comment j'aurais dut faire pour que �a fonctionne avec l'XML ?

    Merci � vous

  7. #7
    Membre �clair� Avatar de Nadinette
    Femme Profil pro
    D�veloppeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Par d�faut
    Salut,

    Je ne sais pas.

    Personnellement, je n'utilise les WebAPI que pour r�pondre � des demandes ajax simple avec peu de param�tres. En cons�quence, je n'ai jamais eu ton probl�me.

    L'information que tu nous as donn�e pourra nous �tre tr�s utile.

    Merci

    Bonne journ�e

  8. #8
    Membre confirm�

    D�veloppeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    D�tails du profil
    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Par d�faut Vieux motard que j'aimais...
    Bonjour,

    Comme je viens d'�tre confront� au m�me souci, j'interviens pour dire que je l'ai r�solu en... revoyant mon code Entity.

    En effet, je fais un peu de veille sur un projet de type EF 6.1 Code First, Web API et Backbone.js (au passage, c'est sainte trinit� est assez sympa).

    Pour avoir d�j� utilis� Web API, je me doutais que le souci ne provenait pas de cette brique.

    Par contre, comme je suis encore au stade d�butant sur EF Code First, je suis parti sur un mod�le un peu complexe pour d�buter.

    Je me suis donc dit : "proc�de par �tape". En l�occurrence, je simule un site de Vente de DVD et j'avais tout mod�lis�. J'ai tout simplement retirer mes entit�s une � une jusqu'� n'en laisser que deux : DVD et Cat�gorie, qui ont des relations simples.

    Depuis, aucun probl�me, le message d'erreur de serialisation XML a disparu. Si je r�active mes autres entit�s, �a plante. Donc, c'est juste que mon Code First n'est pas encore juste. Il est vrai qu'il existe quelques subtilit�s avec CF qu'il faut absolument apprendre car impossible � deviner/anticiper.

    Je n'appr�ciais que tr�s peu la solution propos�e car, quelque part, elle "castre" la Web API qui, justement, a �t� pens�e pour pouvoir fournir une r�ponse � des requ�tes de types JSON comme du XML.

    Voil�, voil�. En esp�rant que cette r�ponse servira � quelqu'un un jour...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [D�butant] Probl�me de post AngularJS , C# web api
    Par aobmilan dans le forum ASP.NET Ajax
    R�ponses: 2
    Dernier message: 24/03/2016, 11h18
  2. [D�butant] [MVC 4] Web API OData : r�cup�ration d'un N� dans l'adresse
    Par Nadinette dans le forum ASP.NET MVC
    R�ponses: 2
    Dernier message: 17/06/2015, 11h58
  3. ASP.NET MVC 4 beta disponible : introduction de Web API
    Par Hinault Romaric dans le forum ASP.NET MVC
    R�ponses: 7
    Dernier message: 28/09/2013, 16h50
  4. MVC 4 web API + Team Foundation Server
    Par Babyneedle dans le forum ASP.NET MVC
    R�ponses: 1
    Dernier message: 16/05/2013, 13h10
  5. ASP.NET MVC, Web API, Razor : Microsoft prendra en compte les contributions externes
    Par Hinault Romaric dans le forum D�veloppement Web avec .NET
    R�ponses: 7
    Dernier message: 04/04/2012, 14h59

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