Obtention du message d’erreur «Aucun type ne correspond au contrôleur nommé» lors de la demande Ajax

J’ai vu beaucoup de sujets à ce sujet, mais malheureusement, je pense que chaque cas est un cas différent (ou la plupart d’entre eux), et j’aimerais beaucoup l’opinion d’experts sur mon cas en particulier, car je ne peux même pas faire fonctionner mon code après avoir lu certains des autres sujets.

Situation: J’utilise un appel Ajax Request dans jQuery avec une méthode WebService créée dans un projet WebApi avec une application MVC 4.

Ma classe de contrôleur WebService ressemble à celle par défaut, comme suit:

public class AdditionalInfoController : ApiController { //GET api/AdditionalInfo public IEnumerable Get() { return new ssortingng[] { "value1", "value2" }; } //GET api/AdditionalInfo/5 public ssortingng Get(int id) { return "value"; } //PUT api/AdditionalInfo/5 public void Put(int id) { ssortingng test = ""; } } 

Ma requête Ajax de jQuery ressemble à ceci:

 function GetAdditionalInfo(obj) { var request = jQuery.ajax({ url: "/api/AdditionalInfo/Get", type: "GET", data: { id: obj.id }, datatype: "json", async: false, beforeSend: function () { }, complete: function () { } }) .done(function (a,b,c) { alert("Additional info was resortingeved successfully!"); }) .fail(function (a,b,c) { alert("An error happened while trying to get the additional info!"); }); } 

Mon fichier WebAPIConfig ressemble à ceci:

 public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 

Et dernier point mais non le moindre, c’est mon problème: ce message d’erreur continue à apparaître lorsque je consulte la variable de données renvoyée dans .fail et c’est ce qui est écrit:

 "{ "Message":"No HTTP resource was found that matches the request URI 'http://localhost:59096/api/AdditionalInfo/Get?id=1'.", "MessageDetail":"No type was found that matches the controller named 'AdditionalInfo'." }" 

J’apprécierais vraiment si quelqu’un pouvait m’aider dès que possible. Merci d’avance!

Meilleures salutations,
Furieux

    En regardant l’erreur, on dirait que l’API Web ne parvient pas à trouver le type de contrôleur, AdditionalInfo. L’API Web utilise le résolveur d’assemblys pour parcourir les assemblages et connaître les types de contrôleur. Dans votre cas, pour une raison quelconque, il est impossible de trouver votre contrôleur ‘AdditionalInfo’ probablement parce qu’il rencontre un problème pour charger l’assemblage doté de ce contrôleur.

    Essayez ce qui suit et voyez s’il ya des erreurs dans votre journal des événements. Si vous remarquez des erreurs, vous devriez probablement vérifier si vos contrôleurs sont présents dans ces assemblages.

    • Apportez les modifications suivantes dans Web.config pour afficher les erreurs dans EventLog.

    • Dans votre WebApiConfig.cs, vous pouvez effectuer les opérations suivantes:

        IAssembliesResolver assembliesResolver = config.Services.GetAssembliesResolver(); ICollection assemblies = assembliesResolver.GetAssemblies(); SsortingngBuilder errorsBuilder = new SsortingngBuilder(); foreach (Assembly assembly in assemblies) { Type[] exportedTypes = null; if (assembly == null || assembly.IsDynamic) { // can't call GetExportedTypes on a dynamic assembly continue; } try { exportedTypes = assembly.GetExportedTypes(); } catch (ReflectionTypeLoadException ex) { exportedTypes = ex.Types; } catch (Exception ex) { errorsBuilder.AppendLine(ex.ToSsortingng()); } } if (errorsBuilder.Length > 0) { //Log errors into Event Log Trace.TraceError(errorsBuilder.ToSsortingng()); } 

      BTW, une partie du code ci-dessus provient en réalité de DefaultHttpControllerTypesResolver que l’API Web utilise pour résoudre les types de contrôleur. http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Dispatcher/DefaultHttpControllerTypeResolver.cs

    Modifié : un autre scénario dans lequel vous pourriez rencontrer ce problème est si votre contrôleur est nested dans une autre classe. C’était un bug qui a été corrigé plus tard.

    Ok, alors je crois avoir découvert ce qui se passait. Je ne suis pas tout à fait certain, mais au moins mon problème a été résolu.

    Simplement en changeant ce qui était à l’intérieur du champ “data” dans l’appel Ajax et j’ai créé une classe pour un object dans l’application pour contenir toutes les données. Il semble que pour une raison quelconque, la méthode ne puisse pas avoir la syntaxe “Get (int ID)”.

    Au lieu de cela, j’ai fait quelque chose comme “Get (object)” et dans la requête Ajax quelque chose comme “data: obj.ID” et le tour est joué, cela a fonctionné.

    De plus, comme le framework est pointilleux sur les noms des méthodes REST (Get, Post, Put et Delete), j’ai changé le nom de la méthode en quelque chose d’autre (comme Resortingeve ou quelque chose).

    Espérons que cela aidera également quelqu’un dans le futur.

    Meilleures salutations,
    Furieux

    Assurez-vous que vous avez les mêmes noms de paramètre dans vos méthodes (int id) et dans votre WebApiConfig / RouteConfig. Essayez en changeant

     public ssortingng Get(int id) { return "hello"; } 

    à

     public ssortingng Get(int? id = null) { return "hello"; } 

    J’ai eu le même problème. chez moi, cela arrive à cause d’un béguin pour le studio visuel (2012). Le fichier de contrôleur était ouvert dans Visual Studio, mais il ne faisait pas partie de ma solution. Je ne pouvais pas le trouver dans le répertoire controllers de l’explorateur de solutions.

    Je viens d’append le fichier à la solution en cliquant avec le bouton droit de la souris sur le répertoire des contrôleurs => add => élément existant.

    cela a résolu le problème pour moi.

    si cela ne fonctionne pas, essayez peut-être de supprimer le contrôleur et d’append un nouveau avec le même code. . .