Konwertuję z interfejsu API sieci Web programu WCF do nowego interfejsu API sieci Web ASP.NET MVC 4. Mam UsersController i chcę mieć metodę o nazwie Authenticate. Widzę przykłady wykonywania GetAll, GetOne, Post i Delete, ale co zrobić, jeśli chcę dodać dodatkowe metody do tych usług? Na przykład moja usługa UsersService powinna mieć metodę o nazwie Authenticate, w której przekazuje nazwę użytkownika i hasło, jednak to nie działa.
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");
}
}
Mogę przejść do myapi / api / users / i wywołać GetAll i mogę przejść do myapi / api / users / 1 i wywoła Get, jednak jeśli wywołam myapi / api / users / authentication? Username = {0} & password = {1} to wywoła Get (NOT Authenticate) i błąd:
Słownik parametrów zawiera wpis o wartości null dla parametru „id” typu „System.Int32” nie dopuszczającego wartości null dla metody „System.String Get (Int32)” w „Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController”. Opcjonalny parametr musi być typem referencyjnym, typem dopuszczającym wartość null lub być zadeklarowany jako parametr opcjonalny.
Jak mogę wywołać niestandardowe nazwy metod, takie jak Authenticate?