Routes 带id和子动作的MVC路线
我不知道我需要用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
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)