Неоднозначные совпадения маршрутов на залитых URL - PullRequest
0 голосов

Я получаю неоднозначное совпадение с uri: Toyota-Corolla-vehicles/2 Я выделил проблему на эти два маршрута

[HttpGet("{make}-vehicles/{makeId:int}")]
[HttpGet("{make}-{query}-vehicles/{makeId:int}")]

Это выглядит довольно однозначно для меня.Разве URI не должен соответствовать маршруту с двумя пунктирными чертами в нем?

Для большего контекста: я использую читаемый URL-адрес, такой как Toyota-vehicles-in-2005.Поэтому я не могу использовать косую черту для разделения.

[HttpGet("{make}-vehicles-in-{year}/{makeId:int}")]

Состояние документов:

Сложные сегменты (например, [Route ("/ dog {token} cat")]), обрабатываются путем сопоставления литералов справа налево не жадным способом .Смотрите исходный код для описания.Для получения дополнительной информации см. Эту проблему.

https://github.com/aspnet/Routing/blob/9cea167cfac36cf034dbb780e3f783114ef94780/src/Microsoft.AspNetCore.Routing/Patterns/RoutePatternMatcher.cs#L296

https://github.com/aspnet/AspNetCore.Docs/issues/8197

1 Ответ

0 голосов
/ 05 мая 2019

Я бы посоветовал вам использовать следующие маршруты:

[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, потому что мы можем проанализировать ее следующим образом:

  1. ALL {make} параметр равен Toyota-Corolla;
  2. {make}-{query} равен Toyota-Corolla, где {make} равно Toyota и {query} равно Corolla соответственно.

Итак, проблема в вашем персонаже -.Если вы не хотите менять свои маршруты, вы можете оставить только [HttpGet("{make}-vehicles/{makeId:int}")] и затем выделить Toyota-Corolla методом string.Split.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...