具有多个参数的MVC4 Web API Rest接口

kei*_*itn 7 parameters rest asp.net-mvc-4 asp.net-web-api

我有一个名为LoginController的控制器,其Get方法的签名为:

public string Get(string Key, string Code, string UserID, string Password)
Run Code Online (Sandbox Code Playgroud)

我希望能够通过类似于以下的调用来调用它:

http://localhost:1234/api/Login/KeyValue/CodeValue/UserValue/PasswordValue
Run Code Online (Sandbox Code Playgroud)

我不能让这个工作.如果我用以下方式调用呼叫:

http://localhost:1234/api/Login?Key=KeyValue&Code=CodeValueUserID=UserValue&Password=PasswordValue 
Run Code Online (Sandbox Code Playgroud)

通话成功.

我已经尝试将下面的路由添加到Global.asax

 routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{action}/{Key}/{Code}/{UserID}/{Password}",
                defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

要么

 routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{Key}/{Code}/{UserID}/{Password}",
                defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

这些似乎不起作用.我哪里出错或者这是否可能?我能够在带有MVC3的RC版WebApi中做到这一点.

str*_*stn 11

您似乎错过了请求中的操作(/api/Login/KeyValue/CodeValue/UserValue/PasswordValue)./api/Login/Get/KeyValue/CodeValue/UserValue/PasswordValue如果您打算使用第一条路线,请尝试使用.

如果您希望能够在未指定操作的情况下调用它并默认为"获取",则必须指定默认操作:

defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get" }
Run Code Online (Sandbox Code Playgroud)

我已经在ASP.NET MVC 4项目(Visual Studio 2012 RC)中成功尝试了这个:

使用action创建LoginController:

public string Get(string Key, string Code, string UserID, string Password)
{
    return Key + Code + UserID + Password;
}
Run Code Online (Sandbox Code Playgroud)

并在Global.asax.cs中映射路由:

 RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{Key}/{Code}/{UserID}/{Password}",
            new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get"});
Run Code Online (Sandbox Code Playgroud)

如果它不适合您,可能是另一条路线正在捕捉请求或路线未被注册.