2012-10-07 5 views
79

Ma route est correctement configurée, et mes méthodes ont la balise décorée. Je reçois toujours "La ressource demandée ne prend pas en charge le message 'GET'" de la méthode HTTP?La ressource demandée ne supporte pas 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 } 
); 

Répondre

190

S'il vous plaît utiliser les attributs de la System.Web. espace de noms 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 parce que vous utilisiez les attributs de l'espace de noms MVCSystem.Web.Mvc. Les classes de l'espace de noms System.Web.Http correspondent à WebAPI.

+8

Merde ... merci! J'étais sur le point de devenir fou lol incroyable comment vous pouvez perdre du temps sur ces petites choses .. – Rushino

+1

Pourquoi est-ce la bonne réponse? –

+1

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

Questions connexes