7

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

public string Get(string Key, string Code, string UserID, string Password)

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

http://localhost:1234/api/Login/KeyValue/CodeValue/UserValue/PasswordValue

我不能让它工作。如果我调用调用:

http://localhost:1234/api/Login?Key=KeyValue&Code=CodeValueUserID=UserValue&Password=PasswordValue 

通话成功。

我尝试将如下路线添加到 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 });

或者

 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 });

这些似乎不起作用。我哪里错了,或者这甚至可能吗?我能够在带有 MVC3 的 RC 版本的 WebApi 中做到这一点。

4

2 回答 2

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" }

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

创建一个带有动作的 LoginController:

public string Get(string Key, string Code, string UserID, string Password)
{
    return Key + Code + UserID + Password;
}

并在 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"});

如果它对您不起作用,则可能是另一条路由正在捕获请求或该路由未注册。

于 2012-10-11T08:22:08.777 回答
0

您正试图在不采取行动的情况下进行路由。有用。

但在这种情况下,您应该在控制器中使用属性来标记操作方法。您可以使用以下属性:HttpGet、HttpPut、HttpPost、HttpDelete、AcceptVerbs、NonAction。

有关更多信息,请在文章中阅读:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

于 2012-10-11T08:32:59.937 回答