我对uri的要求不明确:Toyota-Corolla-vehicles/2
我将问题归结为这两条路线
[HttpGet("{make}-vehicles/{makeId:int}")]
[HttpGet("{make}-{query}-vehicles/{makeId:int}")]
对我来说看起来很明确。 uri是否不应该在路线上加上两个破折号?
有关更多背景信息:
我正在使用类似Toyota-vehicles-in-2005
的可读网址。所以我不能使用正斜杠来分隔。
[HttpGet("{make}-vehicles-in-{year}/{makeId:int}")]
文档状态:
复杂的细分(例如[Route(“ / dog {token} cat”)])是 通过在非贪婪中从右到左匹配文字来进行处理 办法。请参阅源代码以获取描述。有关更多信息,请参见 这个问题。
答案 0 :(得分:0)
我建议您使用以下路线:
[HttpGet("{make}/vehicles/{makeId:int}")]
[HttpGet("{make}/{query}/vehicles/{makeId:int}")]
在这种情况下,Toyota/vehicles/2
和Toyota/Corolla/vehicles/2
之间没有歧义。在您的情况下,由于事实{query}
是string
的类型而造成歧义,因此Toyota-Corolla-vehicles
字符串与{make}-vehicles
和{make}-{query}-vehicles
都匹配,因为我们可以解析像这样:
{make}
参数等于Toyota-Corolla
; {make}-{query}
等于Toyota-Corolla
,其中{make}
是Toyota
,而{query}
是Corolla
。因此,问题出在您的字符-
上。如果您不想更改路线,则只能离开[HttpGet("{make}-vehicles/{makeId:int}")]
并通过Toyota-Corolla
方法来区分string.Split
。