WCF Web API'sinden yeni ASP.NET MVC 4 Web API'sine dönüştürme yapıyorum. Bir UsersController'ım var ve Authenticate adlı bir yönteme sahip olmak istiyorum. GetAll, GetOne, Post ve Delete işlemlerinin nasıl yapılacağına dair örnekler görüyorum, ancak bu hizmetlere fazladan yöntemler eklemek istersem ne olur? Örneğin, My UsersService, bir kullanıcı adı ve parolayı geçtikleri yerde Authenticate adında bir yönteme sahip olmalı, ancak bu çalışmıyor.
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 / adresine göz atabilirim ve GetAll'ı arayacak ve myapi / api / users / 1'e göz atabilirim ve Get'i arayacak, ancak myapi / api / users / Authenticate? Username = {0} & password = {1}, ardından Get (Kimlik Doğrulaması DEĞİL) öğesini çağıracak ve hata verecektir:
Parametreler sözlüğü, 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController' içindeki 'System.String Get (Int32)' yöntemi için null yapılamayan 'System.Int32' türündeki 'id' parametresi için boş bir girdi içerir. İsteğe bağlı bir parametre bir başvuru türü, null atanabilir bir tür olmalı veya isteğe bağlı bir parametre olarak bildirilmelidir.
Kimlik Doğrulama gibi özel yöntem adlarını nasıl çağırabilirim?