Routes 带id和子动作的MVC路线

Routes 带id和子动作的MVC路线,routes,asp.net-web-api,Routes,Asp.net Web Api,我不知道我需要用MVC路由做些什么才能让它工作 以下是我的一条路线: routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "{controller}/{id}/{action}", defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional } ); 请求/shippings/非常有效 请求/shippings/3

我不知道我需要用MVC路由做些什么才能让它工作

以下是我的一条路线:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}/{action}",
    defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional }
);
请求/shippings/非常有效

请求/shippings/3/包非常有效

但是,请求/shippings/3失败,出现错误:

找到多个与请求匹配的操作: System.Linq.IQueryable`1[Api.Controller.RequisitionController+PackageRequestWithTracking] 类型上的GetPackageRequestions(Int32) Api.Controllers.RequisitionController Api.Models.ShipmentRequisition 类型上的GetShipmentRequisitions(Int32) Api.Controllers.RequisitionController

它似乎无法区分:

// No ActionName    
public ShipmentRequisition GetShipmentRequisitions(int id)

[ActionName(“软件包”)]
公共IQueryable GetPackageRequestions(int id)

我原以为在get-shipping-by-id上缺少操作名称会允许该路由工作。

这里已经回答了好几次了-您不能混合使用REST样式的路由(在这里,您要求控制器使用get,它返回默认的get操作)和RPC路由(在路由中提供显式操作名称)在单个控制器中

Web API将不知道使用哪个操作作为默认的“获取”操作

ASP.NET Web堆栈的Codeplex-上的Web API团队存在一个问题


现在最好将控制器分为使用REST路由(基于HTTP谓词的路由)和RPC路由(基于URL中的操作名称的路由)的控制器.

您可以在这里发布您的操作吗?我包含了两个冲突操作的签名。问题在于路由选择不清,而不是方法的内容。您可以将GetShipmentRequisitions操作设置为路由的默认操作。
[ActionName("Packages")]
public IQueryable<PackageRequisitionWithTracking> GetPackageRequisitions(int id)