L'obtention de la “aucun type a été trouvé qui correspond le contrôleur nommé” message d'erreur lors d'une Requête Ajax
J'ai vu beaucoup de sujets sur ce sujet, mais malheureusement, je crois que chaque cas est un cas différent (ou la plupart d'entre eux), et je voudrais vraiment l'amour certains experts avis sur mon cas, en particulier étant donné que je ne peux pas faire mon code fonctionne même après la lecture par le biais de certains autres sujets.
Situation: je suis en utilisant une Requête Ajax appel à jQuery pour un WebService méthode que j'ai créé dans une WebApi projet en collaboration avec une Application MVC 4.
Mon WebService contrôleur de classe ressemble à défaut, comme ceci:
public class AdditionalInfoController : ApiController
{
//GET api/AdditionalInfo
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
//GET api/AdditionalInfo/5
public string Get(int id)
{
return "value";
}
//PUT api/AdditionalInfo/5
public void Put(int id)
{
string 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 retrieved successfully!");
})
.fail(function (a,b,c) {
alert("An error happened while trying to get the additional info!");
});
}
Mon WebAPIConfig fichier 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 le dernier mais non le moindre, c'est mon problème: ce message d'erreur ne cesse d'apparaître lorsque je parcours des données retournées variable .l'échec 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'."
}"
Je serais vraiment reconnaissant si quelqu'un pouvait m'aider dès que possible. Merci à l'avance!
Meilleures salutations,
Mad
OriginalL'auteur MadGatsu | 2013-05-21
Vous devez vous connecter pour publier un commentaire.
En regardant l'erreur ressemble à l'API Web est incapable de trouver le contrôleur de 'type' AdditionalInfo. L'API Web utilise des assemblées outil pour analyser les assemblées et découvre les types de contrôleurs. Dans votre cas, pour une raison de son incapacité à trouver votre AdditionalInfo' contrôleur sans doute parce qu'il a un problème de chargement de l'assemblée ayant ce contrôleur.
Essayez ce qui suit pour voir si toutes les erreurs sont enregistrées dans votre Journal des événements. Si vous remarquez des erreurs, alors vous devriez probablement vérifier si vos contrôleurs sont présents dans ces assemblées.
Apporter la modification suivante dans le Web.config pour afficher les erreurs dans le Journal des événements
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="WebApiDiagnostics" />
</listeners>
</trace>
</system.diagnostics>
Dans votre WebApiConfig.cs, vous pouvez effectuer les opérations suivantes:
BTW, certains le code ci-dessus est en fait à partir de la DefaultHttpControllerTypesResolver Web API utilise pour résoudre les types de contrôleurs.
http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Dispatcher/DefaultHttpControllerTypeResolver.cs
Édité:
Un de plus un scénario où vous pourrait frapper ce problème est si votre contrôleur est imbriquée l'intérieur d'une autre classe. C'était un bug qui a été corrigé par la suite.
Vous pouvez vérifier l'EventViewer du journal des événements d'Application de la source...la catégorie doit être WebApiDiagnostics...
Grâce Kiran, mais je ne pouvais pas faire comme vous l'avez dit. Je ne pouvais pas déchiffrer votre dernier commentaire, j'ai peur, car je n'ai pas vraiment entendu pour EventViewer ou WebApiDiagnostics avant et ma recherche google ne porte pas de fruit. Je l'ai fait pour résoudre mon problème, et je vais le poster sur la réponse suivante. Cheers!
+1: L'extrait de code a été la clé pour résoudre mon problème ici: stackoverflow.com/questions/16812995/.... J'ai juste eu à écrire la trace dans un fichier en raison de l'insuffisance des privilèges à insérer dans le journal des événements.
merci, l'homme, vous avez sauvé ma journée
OriginalL'auteur Kiran Challa
Ok, alors je crois que j'ai trouvé ce qui se passait. Je ne suis pas tout à fait certain, mais au moins, mon problème a fixé.
En changeant simplement de ce qui était à l'intérieur de "données" champ de l'appel Ajax et j'ai créé une classe d'un objet dans l'application pour contenir l'ensemble des données. Il semble que, pour quelque raison, la méthode ne pouvait 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 "données: obj.ID" et le tour est joué, il a travaillé.
Aussi, car le cadre est pointilleux sur les noms de tout le RESTE méthodes (Get, Post, Put et Delete), j'ai changé le nom de la méthode à autre chose (comme le Récupérer ou de quelque chose).
J'espère que cela va aider quelqu'un dans le futur.
Meilleures salutations,
Fou
OriginalL'auteur MadGatsu
Assurez-vous que vous avez les mêmes noms de paramètre dans vos méthodes (int id) ainsi que dans votre WebApiConfig/RouteConfig. Essayez en changeant
à
Vous ne résoudra pas le problème, mais pour moi, il était utile que je savais que le paramètre à l'origine du problème. (J'ai eu exactement la même erreur, parce que le paramètre n'était pas la même que dans WebApiconfig)
OriginalL'auteur enigma969
J'ai eu le même problème. avec moi, il se produit en raison de l'écraser dans visual studio (2012). J'ai eu le contrôleur d'ouverture de fichier dans visual studio, mais ce n'était pas une partie de ma solution, je ne pouvais pas le trouver dans le répertoire controllers dans l'explorateur de solutions.
Je viens d'ajouter le fichier à la solution par un clic droit sur le répertoire controllers => add => un élément existant.
qui a résolu le problème pour moi.
si cela ne fonctionne pas peut-être essayer de supprimer le contrôleur et en ajouter un nouveau, avec le même code . . .
OriginalL'auteur ranbuch