Asp.net web api AttributeRouting参数路由与字符串路由冲突

Asp.net web api AttributeRouting参数路由与字符串路由冲突,asp.net-web-api,asp.net-web-api2,attributerouting,Asp.net Web Api,Asp.net Web Api2,Attributerouting,我有两个控制器,ItemsController和singleitemscontroller,它们都继承自ApiController。两者都在控制器上定义了RoutePrefix项目/库存,如下所示: [RoutePrefix("items/inventory")] 我在WebAPI2.2中使用AttributeRouting 在SingleItemController中,我有以下路线: [Route("{itemReference}")] [HttpGet] public ItemDTO Ge

我有两个控制器,
ItemsController
singleitemscontroller
,它们都继承自
ApiController
。两者都在控制器上定义了RoutePrefix
项目/库存
,如下所示:

[RoutePrefix("items/inventory")]
我在WebAPI2.2中使用AttributeRouting

SingleItemController
中,我有以下路线:

[Route("{itemReference}")]
[HttpGet]
public ItemDTO GetItem(string itemReference)
[Route("all")]
[HttpGet]
public List<ItemDTO> GetAllItems(DateTime dateFrom, DateTime dateTo)
ItemsController
中,我有以下路线:

[Route("{itemReference}")]
[HttpGet]
public ItemDTO GetItem(string itemReference)
[Route("all")]
[HttpGet]
public List<ItemDTO> GetAllItems(DateTime dateFrom, DateTime dateTo)
[路线(“全部”)]
[HttpGet]
公共列表GetAllItems(DateTime dateFrom、DateTime dateTo)
当我尝试点击
/items/inventory/all?dateFrom=2015-09-06&dateTo=2015-09-12
路线时,我得到以下错误:

找到多个与URL匹配的控制器类型。这个可以 如果多个控制器上的属性路由与请求的 网址。请求已找到以下匹配的控制器类型: ItemAPI.Controllers.ItemsController ItemAPI.Controllers.SingleItemController


因此,
{itemReference}
路由与
all
路由冲突。为什么会这样?我认为它首先保留
all
路由,然后允许可选的字符串路由。

这是因为它无法确定“all”是否为项目引用。
最近我遇到了一个类似的问题,我有一个带有“admin”路由前缀的控制器

为了解决这个问题,我对参数设置了一个约束,以忽略“admin”一词。
因此,在您的情况下,您可以执行以下操作来忽略“all”一词: