Estoy convirtiendo de la WCF Web API a la nueva ASP.NET MVC 4 Web API. Tengo un UsersController y quiero tener un método llamado Authenticate. Veo ejemplos de cómo hacer GetAll, GetOne, Post y Delete; sin embargo, ¿qué sucede si quiero agregar métodos adicionales a estos servicios? Por ejemplo, mi UsersService debería tener un método llamado Authenticate donde ingresan un nombre de usuario y contraseña, sin embargo, no funciona.
public class UsersController : BaseApiController
{
public string GetAll()
{
return "getall!";
}
public string Get(int id)
{
return "get 1! " + id;
}
public User GetAuthenticate(string userName, string password, string applicationName)
{
LogWriter.Write(String.Format("Received authenticate request for username {0} and password {1} and application {2}",
userName, password, applicationName));
//check if valid leapfrog login.
var decodedUsername = userName.Replace("%40", "@");
var encodedPassword = password.Length > 0 ? Utility.HashString(password) : String.Empty;
var leapFrogUsers = LeapFrogUserData.FindAll(decodedUsername, encodedPassword);
if (leapFrogUsers.Count > 0)
{
return new User
{
Id = (uint)leapFrogUsers[0].Id,
Guid = leapFrogUsers[0].Guid
};
}
else
throw new HttpResponseException("Invalid login credentials");
}
}
Puedo navegar a myapi / api / users / y llamará a GetAll y puedo navegar a myapi / api / users / 1 y llamará a Get, sin embargo, si llamo a myapi / api / users / authenticate? Username = {0} & password = {1} luego llamará a Get (NO autenticar) y error:
El diccionario de parámetros contiene una entrada nula para el parámetro 'id' de tipo no anulable 'System.Int32' para el método 'System.String Get (Int32)' en 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. Un parámetro opcional debe ser un tipo de referencia, un tipo que acepte valores NULL o declararse como un parámetro opcional.
¿Cómo puedo llamar a nombres de métodos personalizados como Autenticar?