web-dev-qa-db-fra.com

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

Mon itinéraire est correctement configuré et mes méthodes ont l'étiquette 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 }
);
91
Rushino

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

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

Cela ne fonctionne pas parce que vous utilisiez les attributs duMVCnamespace System.Web.Mvc. Les classes de l'espace de noms System.Web.Http sont pour WebAPI .

206
Maggie Ying

Dans mon cas, la signature de route était différente du paramètre de méthode. J'avais id, mais j'acceptais documentId en tant que 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)
{
  ..
}
0
Armando Servin

Je rencontrais le même problème. J'avais déjà 4 contrôleurs fonctionnant correctement, mais lorsque j'ai ajouté celui-ci, il a renvoyé "La ressource demandée ne prend pas en charge la méthode HTTP 'GET'". J'ai tout essayé ici et dans quelques 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 je me suis immédiatement rendu compte que lorsque j'ai ajouté le contrôleur, il était imbriqué dans la classe "Contrôleur" et non dans la classe "ApiController" auquel étaient soumis mes autres contrôleurs. Je suppose que j'ai choisi la mauvaise option d'échafaudage pour générer le fichier .cs dans Visual Studio. J'ai donc inclus l'espace de noms System.Web.Http, modifié la classe parente et tout fonctionne sans les attributs ni le routage supplémentaires.

0
Cameron

juste utiliser cet attribut 

[System.Web.Http.HttpGet]

pas besoin de cette ligne de code:

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