我有一個路由問題,我無法弄清楚如何解決它。只能使用不同名稱的函數可以使用Web api路由嗎?
有一個名爲「UsersController」控制器,它包含2 POST操作功能:
public int PostFBLogin(User userObject){}
public void PostUpdateImgUrl(User userObject){}
當我做一個POST請求,我通過「用戶」的JSON表示請求體。 如果我註釋掉其中一個函數,那麼它工作正常。 但是當兩種功能存在,每當我試圖讓他們中的每一個要求,我得到以下錯誤:
"Multiple actions were found that match the request:
Int32 PostFBLogin(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController
Void PostUpdateImgUrl(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController"
我試圖通過將以下途徑在路由表來解決這個問題:
RouteTable.Routes.MapHttpRoute(
name: "UserPostUpdateImgUrlAction",
routeTemplate: "api/users/PostUpdateImgUrl/",
defaults: new
{
controller = "users",
action = "PostUpdateImgUrl"
}
);
RouteTable.Routes.MapHttpRoute(
name: "UserPostFBLoginAction",
routeTemplate: "api/users/PostFBLogin/",
defaults: new
{
controller = "users",
action = "PostFBLogin"
}
);
但它沒有幫助。
看了很多關於互聯網路由表的帖子後,我不確定甚至有可能有兩個具有相同簽名但名稱不同的操作。
任何人都可以幫忙嗎?
謝謝, Edi。
所以現在我試圖使用以下路由: RouteTable.Routes.MapHttpRoute(name:「ActionApi」,routeTemplate:「api/{controller}/{action}/{id}」,默認值:new {id = RouteParameter.Optional} ); 我也把[HttpPost]放在兩個函數上。但我仍然得到同樣的錯誤。 – Edi 2012-07-12 22:26:25
這應該工作。這可能是由路線衝突造成的。您是否添加了新路線而不是更改默認路線?在這種情況下,需要在沒有采取行動的路線之前指定具有行動的路線。 – Martin4ndersen 2012-07-13 06:33:38
太棒了!現在它工作了! 實際上在Application_Start中沒有任何DefaultApi路由。它已經在路由列表中。所以我不得不在列表中的DefaultApi路由之前插入新路由 - 就像你說的那樣。 – Edi 2012-07-13 06:51:52