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”一词: