Bonjour à tous !
J'ai un problème étrange avec ma WEB API qui est apparu du jour au lendemain...
J'utilise EF, et asp mvc4 web api.
J'ai mon contrôleur appelOffre webAPI qui me retourne mes appels d'offre, tous fonctionne bien si je n'inclus pas une autre table à ma requête.
Je m'explique :
Ici j'inclus statutAppelOffre et du coup mon retour en JSON n'est pas formé correctement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class APIappelOffreController : ApiController { private GAOContainer db = new GAOContainer(); // GET api/APIappelOffre public List<appelOffre> GetappelOffres() { var appeloffre = db.appelOffre.Include("statutAppelOffre"); return appeloffre.ToList(); }
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 [ { "$id": "1", "entreprise": null, "technologie": [], "statutAppelOffre": { "$id": "2", "appelOffre": [ { "$ref": "1" }, { "$id": "3", "entreprise": null, "technologie": [], "statutAppelOffre": { "$ref": "2" }, "document": [], "budget": [], "cv": [], "appelOffreCommentaire": [], "projectCommunicator": [], "source": null, "recette": [], "ID": 4, "titre": "bbb", "pretention": 2222.0, "dateAjout": "2012-12-12T00:00:00", "dateDebut": "2012-12-12T00:00:00", "deadLine": "2012-12-12T00:00:00", "dateLivraison": "2012-12-12T00:00:00", "lienProjet": "bbbbb", "entrepriseID": 1, "statutAppelOffreID": 1, "sourceID": 1 } ], "ID": 1, "libelle": "En Cours" }, "document": [], "budget": [], "cv": [], "appelOffreCommentaire": [], "projectCommunicator": [], "source": null, "recette": [], "ID": 3, "titre": "aaaaa", "pretention": 1.0, "dateAjout": "2012-12-12T00:00:00", "dateDebut": "2012-12-12T00:00:00", "deadLine": "2012-12-12T00:00:00", "dateLivraison": "2012-12-12T00:00:00", "lienProjet": "aaaa", "entrepriseID": 1, "statutAppelOffreID": 1, "sourceID": 1 }, { "$ref": "3" } ]
En fait il met le 2eme appel d'offre à l’intérieur de statutAppelOffre du premier...
Si j'inclus une autre table comme entreprise, il va faire la même chose dans le premier membre inclut soit entreprise. Même si j'enlève les includes et que j'active le lazyLoading j'ai le même problème.
Le truc c'est que tous fonctionnait très bien avant je n'ai rien touché et je travail sur une machine virtuelle ...
Voila le contenu de 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); } }
Merci à vous parceque là je suis vraiment coincé!
Partager