Mon itinéraire est correctement configuré et mes méthodes ont la balise décorée. Je reçois toujours le message "La ressource demandée ne prend pas en charge la méthode HTTP 'GET'"?
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
// Décoder les paramètres reçue.
string decodedUsername = username.DecodeFromBase64();
string decodedPassword = password.DecodeFromBase64();
return "value";
}
Voici mes itinéraires:
config.Routes.MapHttpRoute(
name: "AuthentificateRoute",
routeTemplate: "api/game/authentificate;{username};{password}",
defaults: new { controller = "Game",
action = "Auth",
username = RouteParameter.Optional,
password = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", id = RouteParameter.Optional }
);
c#
routing
asp.net-web-api
Rushino
la source
la source
utilisez simplement cet attribut
pas besoin de cette ligne de code:
la source
Dans mon cas, la signature de l'itinéraire était différente du paramètre de méthode. J'avais id, mais j'acceptais documentId comme paramètre, ce qui a causé le problème.
la source
J'éprouvais le même problème. J'avais déjà 4 contrôleurs en marche et fonctionnant très bien mais quand j'ai ajouté celui-ci, il a renvoyé "La ressource demandée ne supporte pas la méthode HTTP 'GET'". J'ai tout essayé ici et dans quelques autres articles pertinents, mais j'étais indifférent à la solution car, comme Dan B. l'a mentionné en réponse à la réponse, j'en avais déjà d'autres qui fonctionnaient bien.
Je suis parti un moment, je suis revenu et j'ai immédiatement réalisé que lorsque j'ai ajouté le contrôleur, il était imbriqué dans la classe "Controller" et non dans la classe "ApiController" que mes autres contrôleurs étaient sous. Je suppose que j'ai choisi la mauvaise option d'échafaudage pour créer le fichier .cs dans Visual Studio. J'ai donc inclus l'espace de noms System.Web.Http, changé la classe parente et tout fonctionne sans les attributs supplémentaires ni le routage.
la source