Ich konvertiere von der WCF-Web-API in die neue ASP.NET MVC 4-Web-API. Ich habe einen UsersController und möchte eine Methode namens Authenticate. Ich sehe Beispiele für GetAll, GetOne, Post und Delete. Was ist jedoch, wenn ich diesen Diensten zusätzliche Methoden hinzufügen möchte? Zum Beispiel sollte mein UsersService eine Methode namens Authentifizieren haben, bei der er einen Benutzernamen und ein Passwort übergibt, dies funktioniert jedoch nicht.
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");
}
}
Ich kann zu myapi / api / users / navigieren und es wird GetAll aufrufen und ich kann zu myapi / api / users / 1 navigieren und es wird Get aufrufen. Wenn ich jedoch myapi / api / users / authenticate aufrufe? Username = {0} & password = {1}, dann wird Get (NOT Authenticate) und error aufgerufen:
Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'id' vom nicht nullbaren Typ 'System.Int32' für die Methode 'System.String Get (Int32)' in 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. Ein optionaler Parameter muss ein Referenztyp oder ein nullbarer Typ sein oder als optionaler Parameter deklariert werden.
Wie kann ich benutzerdefinierte Methodennamen wie Authentifizieren aufrufen?