Estou convertendo da API Web do WCF para a nova API Web ASP.NET MVC 4. Eu tenho um UsersController e quero um método chamado Authenticate. Vejo exemplos de como fazer GetAll, GetOne, Post e Delete, mas e se eu quiser adicionar métodos extras a esses serviços? Por exemplo, meu UsersService deve ter um método chamado Authenticate onde eles passam um nome de usuário e senha, mas não 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");
}
}
Posso navegar para myapi / api / users / e ele chamará GetAll e posso navegar para myapi / api / users / 1 e chamará Get, no entanto, se eu chamar myapi / api / users / authenticate? Username = {0} & senha = {1} então chamará Get (NOT Authenticate) e erro:
O dicionário de parâmetros contém uma entrada nula para o parâmetro 'id' do tipo não anulável 'System.Int32' para o método 'System.String Get (Int32)' em 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. Um parâmetro opcional deve ser um tipo de referência, um tipo anulável ou ser declarado como um parâmetro opcional.
Como posso chamar nomes de métodos personalizados, como Authenticate?