Проблема маршрутизации со сложными сегментами - PullRequest
0 голосов
/ 12 апреля 2019

Мое приложение выполняет поиск элементов по местоположению.У меня есть несколько пользовательских маршрутов и правил перенаправления, чтобы предоставить пользователю удобный и понятный URL, но я только что заметил странное поведение с некоторыми из них.

Мой маршрут определен следующим образом:

routes.MapRoute("searchRoute", "search/in-{location}", new { controller = "search", action = "index" });

Следующие поиски работают очень хорошо:

  • / search / in-melbourne
  • / search / in-western-australia
  • / search / in-sydney-NSW
  • / search / in-perth-WA-6000
  • / search / in-brisbane-CBD
  • / поиск / в австралийской столице-территории-act

Я использую здесь сложный шаблон " search / in- {location} ".Я также форматирую местоположение, заменяя любые пробельные символы на «-» с некоторыми перенаправлениями в другом месте (но это не имеет значения здесь). Проблема возникает, когда в поисковом URL есть местоположение, которое содержит « in-":

Например, URL-адреса / search / in-darwin-city или / search / in-testin-test не совпадают с моим searchRoute (Я использовал RouteDebugger, чтобы подтвердить это, и даже протестировал другое ключевое слово, кроме «in-», без удачи).

Microsoft doc (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2#complex-segments) говорит:

Сложные сегменты (дляпример [Route ("/ x {token} y")] ) обрабатываются путем сопоставления литералов справа налево без жадности.

У меня былпосмотрите на код (https://github.com/aspnet/AspNetCore/blob/release/2.2/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs#L293), но все еще не уверены, почему это происходит, и самое главное, как это решить.

Любая помощь будет высоко ценится

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