2012-10-11 84 views
7

tengo un controlador llamado LoginController con un método Get con una firma de:MVC4 Web interfaz API Resto con varios parámetros

public string Get(string Key, string Code, string UserID, string Password) 

Quiero ser capaz de invocar con una llamada similar a:

http://localhost:1234/api/Login/KeyValue/CodeValue/UserValue/PasswordValue 

No puedo hacer que esto funcione. Si invoco la llamada con:

http://localhost:1234/api/Login?Key=KeyValue&Code=CodeValueUserID=UserValue&Password=PasswordValue 

La llamada fue exitosa.

He intentado añadir rutas como la de abajo para Global.asax

routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{action}/{Key}/{Code}/{UserID}/{Password}", 
       defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional }); 

o

routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{Key}/{Code}/{UserID}/{Password}", 
       defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional }); 

Estos no parecen funcionar. ¿Dónde estoy equivocado o esto es posible? Pude hacer esto en la versión RC de WebApi con MVC3.

Respuesta

10

Parece que le falta la acción en su solicitud (/api/Login/KeyValue/CodeValue/UserValue/PasswordValue). Pruebe /api/Login/Get/KeyValue/CodeValue/UserValue/PasswordValue en su lugar, si tiene la intención de utilizar la primera ruta.

Si usted quiere ser capaz de llamar a ella sin la acción especificada y por defecto a "Get", tiene que especificar una acción predeterminada:

defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get" } 

He tratado con éxito esta en un ASP.NET MVC 4 proyectos (Visual Studio 2012 RC):

Creación de una LoginController con la acción:

public string Get(string Key, string Code, string UserID, string Password) 
{ 
    return Key + Code + UserID + Password; 
} 

y cartografía sobre la ruta en Global.asax.cs:

RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{Key}/{Code}/{UserID}/{Password}", 
      new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get"}); 

Si no funciona para usted, tal vez otra ruta está captando la solicitud o la ruta no está siendo registrada.

+0

estoy de acuerdo, yo necesidad de exponer una API para un tercero por lo que el formato está fuera de mi control. He intentado con lo que sugirió, pero ninguno de los enfoques funciona (agregando GET o especificando acción predeterminada). También intenté agregar [HttpGet] a la etiqueta del controlador. – keitn

+0

Estás en lo correcto. Incorporé erróneamente un método RegisterRoutes a Global.asax (como en MVC3), una vez que lo agregué en RouteConfig.cs todo funciona bien. Gracias. – keitn

Cuestiones relacionadas