J'ai l'action suivante sur un ApiController:
public string Something()
{
return "value";
}
Et j'ai configuré mes itinéraires comme suit:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Dans la version bêta, cela fonctionnait très bien, mais je viens de mettre à jour la dernière version Release Candidate et je vois maintenant des erreurs sur des appels comme celui-ci:
La ressource demandée ne prend pas en charge la méthode http «GET».
Pourquoi ça ne marche plus?
(Je suppose que je pourrais me débarrasser de {action} et créer une tonne de contrôleurs, mais cela semble compliqué.)
la source
Toutes les informations ci-dessus sont correctes, je tiens également à souligner que l'
[AcceptVerbs()]
annotation existe à la fois dans les espaces de noms System.Web.Mvc et System.Web.Http.Vous souhaitez utiliser System.Web.Http s'il s'agit d'un contrôleur d'API Web.
la source
Bien que ce ne soit pas une réponse à l'OP, j'ai eu exactement la même erreur d'une cause racine complètement différente; donc au cas où cela aiderait quelqu'un d'autre ...
Le problème pour moi était un paramètre de méthode mal nommé qui a amené WebAPI à acheminer la demande de manière inattendue. J'ai les méthodes suivantes dans mon ProgrammesController:
Les demandes DELETE à ... / api / programs / 3 n'étaient pas acheminées vers DeleteProgramme comme je m'y attendais, mais vers GetProgrammeById, car DeleteProgramme n'avait pas de nom de paramètre id. GetProgrammeById rejetait alors bien sûr le DELETE car il est marqué comme n'acceptant que les GET.
La solution était donc simple:
Et tout va bien. Erreur stupide vraiment mais difficile à déboguer.
la source
Si vous décorez votre méthode avec
HttpGet
, ajoutez ce qui suitusing
en haut du contrôleur:Si vous utilisez
System.Web.Mvc
, ce problème peut se produire.la source
C'est certainement un changement de Beta à RC. Dans l'exemple fourni dans la question, vous devez maintenant décorer votre action avec [HttpGet] ou [AcceptVerbs ("GET")].
Cela pose un problème si vous souhaitez mélanger des actions basées sur des verbes (c'est-à-dire "GetSomething", "PostSomething") avec des actions non basées sur des verbes. Si vous essayez d'utiliser les attributs ci-dessus, cela provoquera un conflit avec toute action basée sur des verbes dans votre contrôleur. Une façon d'obtenir un montant serait de définir des routes séparées pour chaque verbe et de définir l'action par défaut sur le nom du verbe. Cette approche peut être utilisée pour définir des ressources enfants dans votre API. Par exemple, le code suivant prend en charge: "/ resource / id / children" où id et children sont facultatifs.
Espérons que les futures versions de l'API Web auront un meilleur support pour ce scénario. Un problème est actuellement enregistré sur le projet codeplex aspnetwebstack, http://aspnetwebstack.codeplex.com/workitem/184 . Si c'est quelque chose que vous aimeriez voir, veuillez voter sur la question.
la source
Avoir la même configuration que OP. Un contrôleur avec de nombreuses actions ... moins "salissant" :-)
Dans mon cas, j'ai oublié le "[HttpGet]" lors de l'ajout d'une nouvelle action.
la source
Même problème que ci-dessus, mais racine très différente. Pour moi, c'était que j'atteignais un point de terminaison avec une règle de réécriture https. Le frapper sur http a provoqué l'erreur, a fonctionné comme prévu avec https.
la source
Remplacez le code suivant dans ce chemin
Chemin :
App_Start => WebApiConfig.cs
Code:
la source
Je ne sais pas si cela peut être lié à la publication de l'OP mais il me manquait l'annotation [HttpGet] et c'est ce qui causait l'erreur, comme indiqué par @dinesh_ravva, les méthodes sont supposées être HttpPost par défaut.
la source
Mon problème était aussi simple que d'avoir une référence nulle qui n'apparaissait pas dans le message retourné, j'ai dû déboguer mon API pour la voir.
la source