我有一个名为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的Web版本的RC版本中做到这一点。
答案 0 :(得分: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"});
如果它不适合您,可能是另一条路线正在接收请求或路线未被注册。
答案 1 :(得分:0)
您正在尝试无需操作即可进行路由。它有效。
但在这种情况下,您应该使用控制器中的属性来标记操作方法。您可以使用以下属性:HttpGet,HttpPut,HttpPost,HttpDelete,AcceptVerbs,NonAction。
有关更多信息,请参阅文章:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api