Je passe de l'API Web WCF à la nouvelle API Web ASP.NET MVC 4. J'ai un UsersController et je souhaite avoir une méthode nommée Authenticate. Je vois des exemples de la façon de faire GetAll, GetOne, Publier et Supprimer, mais que faire si je veux ajouter des méthodes supplémentaires à ces services? Par exemple, mon UsersService devrait avoir une méthode appelée Authenticate où ils transmettent un nom d'utilisateur et un mot de passe, mais cela ne fonctionne pas.
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");
}
}
Je peux accéder à myapi / api / users / et il appellera GetAll et je peux accéder à myapi / api / users / 1 et il appellera Get, cependant si j'appelle myapi / api / users / authenticate? Username = {0} & password = {1} alors il appellera Get (NOT Authenticate) et l'erreur:
Le dictionnaire de paramètres contient une entrée nulle pour le paramètre 'id' de type non nullable 'System.Int32' pour la méthode 'System.String Get (Int32)' dans 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. Un paramètre facultatif doit être un type référence, un type Nullable ou être déclaré en tant que paramètre facultatif.
Comment puis-je appeler des noms de méthode personnalisés tels que Authenticate?