Sto convertendo dall'API Web WCF alla nuova API Web ASP.NET MVC 4. Ho un UsersController e voglio un metodo denominato Authenticate. Vedo esempi di come eseguire GetAll, GetOne, Post e Delete, ma cosa succede se voglio aggiungere metodi extra a questi servizi? Ad esempio, il mio UsersService dovrebbe avere un metodo chiamato Authenticate dove passano un nome utente e una password, ma non funziona.
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 passare a myapi / api / users / e chiamerà GetAll e posso passare a myapi / api / users / 1 e chiamerà Get, tuttavia se chiamo myapi / api / users / authenticate? Username = {0} & password = {1} quindi chiamerà Get (NOT Authenticate) ed errore:
Il dizionario dei parametri contiene una voce nulla per il parametro "id" di tipo non nullable "System.Int32" per il metodo "System.String Get (Int32)" in "Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController". Un parametro facoltativo deve essere un tipo di riferimento, un tipo nullable o essere dichiarato come parametro facoltativo.
Come posso chiamare nomi di metodi personalizzati come Authenticate?