Имена пользовательских методов в веб-API ASP.NET

Я перехожу с веб-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 (НЕ аутентифицировать) и ошибку:

Словарь параметров содержит пустую запись для параметра 'id' не допускающего значения NULL типа 'System.Int32' для метода 'System. String Get (Int32) 'в' Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController '. Необязательный параметр должен быть ссылочным типом, типом, допускающим значение NULL, или быть объявленным как необязательный параметр.

Как я могу вызвать пользовательские имена методов, такие как Authenticate?

108
задан abatishchev 27 January 2014 в 21:12
поделиться