Имена пользовательских методов в ASP.NET Web API
Я преобразую веб-API WCF в новый веб-API ASP.NET MVC 4. У меня есть UsersController, и я хочу иметь метод с именем Authenticate. Я вижу примеры того, как сделать GetAll, GetOne, Post и Delete, но что, если я хочу добавить дополнительные методы в эти службы? Например, мой UsersService должен иметь метод Authenticate, в котором они передают имя пользователя и пароль, однако он не работает.
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");
}
}
Я могу перейти к myapi / api / users /, и он вызовет GetAll, а я могу перейти к myapi / api / users / 1 и вызвать Get, однако если я вызову myapi / api / users / authenticate? Username = {0} & password = {1}, тогда он вызовет Get (NOT Authenticate) и ошибку:
Словарь параметров содержит пустую запись для параметра id с ненулевым типом System.Int32 для метода System.String Get (Int32) в Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController. Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.
Как я могу вызвать имена пользовательских методов, таких как Authenticate?