104 votes

La ressource demandée ne supporte pas la méthode HTTP 'GET'.

Ma route est correctement configurée, et mes méthodes ont la balise decorated. Je reçois toujours le message "The requested resource does not support HTTP method '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 }
);

234voto

Maggie Ying Points 3804

Veuillez utiliser les attributs de System.Web. Http sur vos actions WebAPI :

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    [System.Web.Http.HttpGet]
    public string Auth(string username, string password)
    {...}

La raison pour laquelle cela ne fonctionne pas est que vous avez utilisé les attributs qui sont de l'élément MVC espace de noms System.Web.Mvc . Les classes de l System.Web.Http sont destinés à WebAPI .

12 votes

Merde merci ! J'étais sur le point de devenir fou lol incroyable comment on peut perdre du temps sur de si petites choses

1 votes

En effet, une explication de pourquoi c'est la bonne réponse est certainement nécessaire ici !

6 votes

Réponse éditée avec explication.

4voto

Armando Servin Points 86

Dans mon cas, la signature de la route était différente du paramètre de la méthode. J'avais id, mais j'acceptais documentId comme paramètre, ce qui a causé le problème.

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}

3voto

Kashif Faraz Points 181

Utilisez simplement cet attribut

[System.Web.Http.HttpGet]

pas besoin de cette ligne de code :

[System.Web.Http.AcceptVerbs("GET", "POST")]

2voto

Cameron Points 21

Je rencontrais le même problème J'avais déjà 4 contrôleurs qui fonctionnaient parfaitement, mais lorsque j'ai ajouté celui-ci, il a renvoyé le message "The requested resource does not support HTTP method 'GET'". J'ai tout essayé ici et dans quelques autres articles pertinents mais j'étais indifférent à la solution puisque, comme Dan B. l'a mentionné en réponse à la réponse, j'avais déjà les autres qui fonctionnaient bien.

Je me suis absenté 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" sous laquelle se trouvaient mes autres contrôleurs. Je suppose que j'ai choisi la mauvaise option d'échafaudage pour construire 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 attributs ou routage supplémentaires.

2voto

Marquis103 Points 172

J'ai résolu ce problème en utilisant http(s) lors de l'accès au point de terminaison. La route à laquelle j'accédais n'était pas disponible sur http . Je dirais donc de vérifier les protocoles pour lesquels la route est disponible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X