Tôi đang chuyển đổi từ API Web WCF sang API Web ASP.NET MVC 4 mới. Tôi có một UsersController và tôi muốn có một phương thức có tên là Xác thực. Tôi thấy các ví dụ về cách thực hiện GetAll, GetOne, Đăng và Xóa, tuy nhiên nếu tôi muốn thêm các phương thức bổ sung vào các dịch vụ này thì sao? Ví dụ: UsersService của tôi phải có một phương thức được gọi là Xác thực nơi họ chuyển tên người dùng và mật khẩu, tuy nhiên nó không hoạt động.
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");
}
}
Tôi có thể duyệt tới myapi / api / users / và nó sẽ gọi GetAll và tôi có thể duyệt tới myapi / api / users / 1 và nó sẽ gọi Get, tuy nhiên nếu tôi gọi myapi / api / users / authenticate? Username = {0} & password = {1} thì nó sẽ gọi Get (NOT Authenticate) và báo lỗi:
Từ điển tham số chứa một mục nhập rỗng cho tham số 'id' thuộc loại không thể nullable 'System.Int32' cho phương thức 'System.String Get (Int32)' trong 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. Một tham số tùy chọn phải là một kiểu tham chiếu, một kiểu nullable hoặc được khai báo như một tham số tùy chọn.
Làm cách nào tôi có thể gọi các tên phương thức tùy chỉnh như Xác thực?