0

我不知道我需要用 MVC 路由做什么才能完成这项工作

这是我的一条路线:

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

请求/Shipments/效果很好。

请求/Shipments/3/Packages效果很好。

然而,请求/Shipments/3失败并出现错误:

找到与请求匹配的多个操作:System.Linq.IQueryable`1[Api.Controllers.RequisitionsController+PackageRequisitionWithTracking] GetPackageRequisitions(Int32) on type Api.Controllers.RequisitionsController Api.Models.ShipmentRequisition GetShipmentRequisitions(Int32) on type Api.Controllers .RequestsController

它似乎无法区分:

// No ActionName    
public ShipmentRequisition GetShipmentRequisitions(int id)

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

我会认为 get shipping by id 上缺少操作名称将允许该路线工作。

4

1 回答 1

0

这里已经回答过几次了——你不能混合使用 REST 风格的路由(你用 GET 请求控制器,它返回默认的 Get 动作)和 RPC 路由(你在路由中提供明确的动作名称) ) 在单个控制器中。

Web API 将不知道将哪个操作用作默认的“GET”操作。

Web API 团队在 ASP.NET Web Stack 的 Codeplex 上存在一个问题 - http://aspnetwebstack.codeplex.com/workitem/184

你现在最好的选择是将你的控制器分成使用 REST 路由(基于 HTTP 动词的路由)和 RPC 路由(基于 URL 中的动作名称的路由)的控制器。

于 2012-10-04T11:56:42.557 回答