ASP.NET Web API中的自定义方法名称

我正在从WCF Web API转换为新的ASP.NET MVC 4 Web API。我有一个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(不进行身份验证)并报错:


参数字典包含用于'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'中方法'System.String Get(Int32)'的非空类型'System.Int32'的参数'id'的空条目。可选参数必须是引用类型,可为空的类型,或者必须声明为可选参数。


如何调用自定义方法名称,例如Authenticate?


HUH函数
浏览 1142回答 3
3回答

三国纷争

我已经进入MVC4世界了。对于它的价值,我有一个SitesAPIController,并且我需要一个自定义方法,该方法可以这样称呼:http://localhost:9000/api/SitesAPI/Disposition/0最后一个参数使用不同的值来获取具有不同处置方式的记录。最终为我工作的是:SitesAPIController中的方法:// GET api/SitesAPI/Disposition/1[ActionName("Disposition")][HttpGet]public Site Disposition(int disposition){    Site site = db.Sites.Where(s => s.Disposition == disposition).First();    return site;}而这在WebApiConfig.cs中// this was already thereconfig.Routes.MapHttpRoute(    name: "DefaultApi",    routeTemplate: "api/{controller}/{id}",    defaults: new { id = RouteParameter.Optional });// this i addedconfig.Routes.MapHttpRoute(    name: "Action",    routeTemplate: "api/{controller}/{action}/{disposition}" );只要我将{disposition}命名为{id},我就一直遇到:{"Message": "No HTTP resource was found that matches the request URI 'http://localhost:9000/api/SitesAPI/Disposition/0'.","MessageDetail": "No action was found on the controller 'SitesAPI' that matches the request."}当我将其重命名为{disposition}时,它开始工作。因此,显然参数名与占位符中的值匹配。
打开App,查看更多内容
随时随地看视频慕课网APP