2012-10-07 40 views
79

Mi ruta está configurada correctamente y mis métodos tienen la etiqueta decorada. Sigo recibiendo "¿El recurso solicitado no es compatible con el método HTTP 'OBTENER'"?El recurso solicitado no admite el método 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"; 
} 

Éstos son mis rutas:

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 } 
); 

Respuesta

190

por favor utilice los atributos de la System.Web. Http espacio de nombres en sus acciones del API web:

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

La razón por la que no funciona se debe a que estaba usando los atributos que son de la MVC espacio de nombres System.Web.Mvc. Las clases en el espacio de nombres System.Web.Http son para WebAPI.

+8

Maldita sea ... gracias! estaba a punto de volverme loca, increíble como puedes perder el tiempo en cosas tan pequeñas. – Rushino

+1

¿Por qué es esta la respuesta correcta? –

+1

De hecho, aquí es necesaria una explicación de ** por qué ** esta es la respuesta correcta. – Jaxidian

Cuestiones relacionadas