2012-10-11 45 views
7

我有一個名爲的LoginController用Get方法控制器的簽名:MVC4的Web API REST接口與多參數

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中做到這一點。

回答

10

看來你錯過了你的請求中的動作(/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"}); 

如果它不適合你,也許另一條路線正在趕上請求或路線沒有被註冊。

+0

我同意我,我需要一個API暴露給第三方,這樣的格式是在我的掌握。我嘗試了你的建議,但都沒有辦法(添加GET或指定默認操作)。我也嘗試將[HttpGet]添加到控制器標籤。 – keitn

+0

你是對的。我錯誤地將RegisterRoutes方法添加到Global.asax(如在MVC3中),一旦我將它添加到RouteConfig.cs中,它就可以正常工作。謝謝。 – keitn