gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:18:49 25 4
gpt4 key购买 nike

我有两个 Controller ,ItemsControllerSingleItemController,它们都继承自 ApiController。两者都在 Controller 上定义了 RoutePrefix items/inventory,如下所示:

[RoutePrefix("items/inventory")]

我在 Web API 2.2 中使用 AttributeRouting。

SingleItemController 中,我有以下路线:

[Route("{itemReference}")]
[HttpGet]
public ItemDTO GetItem(string itemReference)

ItemsController 中,我有以下路线:

[Route("all")]
[HttpGet]
public List<ItemDTO> GetAllItems(DateTime dateFrom, DateTime dateTo)

当我尝试访问 /items/inventory/all?dateFrom=2015-09-06&dateTo=2015-09-12 路线时,出现以下错误:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL. The request has found the following matching controller types: ItemAPI.Controllers.ItemsController ItemAPI.Controllers.SingleItemController

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

最佳答案

这是因为它无法判断“all”是否是一个item reference。
我最近遇到了一个类似的问题,我有一个带有“admin”路由前缀的 Controller 。

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

[Route("{itemReference:regex(^(?!all))})]

关于asp.net-web-api - AttributeRouting 参数路由与字符串路由冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com