Demande Ajax Jquery avec l’API WEB

J’essaie de récupérer un résultat JSON à partir d’un appel d’API WEB.

Ma méthode API WEP:

[AcceptVerbs("GET", "POST")] public object GetTest() { rep = new ChatRepository(); chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null); System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult { Data = box, JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet }; return jsonResult.Data; } 

J’ai modifié le WebapiConfig.cs comme ci-dessous, de sorte qu’il renvoie toujours JSON

  config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { action = "get", id = RouteParameter.Optional } ); var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

Ci-dessous mon appel ajax Jquery:

  $(document).ready(function () { $.ajax({ type: 'GET', url: 'http://localhost:6606/api/values/GetTest', dataType: 'json', crossDomain: true, success: function (msg) { alert('success'); }, error: function (request, status, error) { alert('error'); } }); });  

Il finit toujours par une alerte d’erreur. aucune donnée n’est reçue de l’API WEB. J’ai essayé de déboguer et j’ai constaté que ma demande atteignait la méthode de l’API WEB et renvoyait JSON. Vous trouverez ci-dessous les données JSON renvoyées.

{“listOfItems”: [{“id”: 14, “description”: “Nouveau test”, “numéro d’affichage”: 1}, {“id”: 4, “description”: “opérationnel”, “numéro d’affichage”: 2} , {“id”: 3, “description”: “ventes”, “numéro d’affichage”: 3}, {“id”: 5, “description”: “technique”, “numéro d’affichage”: 4}], “répondre”: null, “history”: null, “Initialhistory”: null, “Question”: “”, “chatids”: null, “displayNum”: null}

pourquoi je n’obtiens aucun résultat côté client?

J’ai résolu le problème en ajoutant Access-Control-Allow-Origin à l’en-tête de la réponse.

 public class CrossDomainActionFilter : ActionFilterAtsortingbute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { bool needCrossDomain = true; if (needCrossDomain) { actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); } base.OnActionExecuted(actionExecutedContext); } } [AcceptVerbs("GET", "POST")] [CrossDomainActionFilter] public object GetTest() { rep = new ChatRepository(); chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null); System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult { Data = box, JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet }; return jsonResult.Data; }