2012-10-04 64 views
0

我想不出什麼,我需要與MVC路由做的,使這項工作與ID和子行動MVC路線

這是我的一個途徑:

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "{controller}/{id}/{action}", 
    defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional } 
); 

請求/發貨/效果很好。

該請求/發貨/ 3 /包裝偉大的工程。然而

請求/裝運/ 3失敗,錯誤:

Multiple actions were found that match the request: System.Linq.IQueryable`1[Api.Controllers.RequisitionsController+PackageRequisitionWithTracking] GetPackageRequisitions(Int32) on type Api.Controllers.RequisitionsController Api.Models.ShipmentRequisition GetShipmentRequisitions(Int32) on type Api.Controllers.RequisitionsController

它似乎無法區分:

// No ActionName  
public ShipmentRequisition GetShipmentRequisitions(int id) 

[ActionName("Packages")] 
public IQueryable<PackageRequisitionWithTracking> GetPackageRequisitions(int id) 

我可能會認爲id wo上的貨運缺乏行動名稱允許該路線工作。

+0

你可以在這裏發佈你的動作嗎? –

+0

我包含了兩個衝突行爲的簽名。這是路由選擇問題而不是方法內容的問題。 –

+0

您可以將GetShipmentRequisitions操作設置爲路由的默認操作。 –

回答

0

已經在這裏回答了幾次 - 您不能將REST樣式路由(您向控制器請求GET並返回默認Get操作)和RPC路由(您提供顯式操作的地方名稱在路線中)單控制器

Web API將不知道使用哪個動作作爲默認的「GET」動作。

ASP.NET Web Stack的Codeplex - http://aspnetwebstack.codeplex.com/workitem/184上的Web API團隊存在一個問題。

現在最好的辦法是將控制器分成使用REST路由(基於HTTP動態路由)和RPC路由(基於URL中動作名稱的路由)的控制器。