Мое приложение выполняет поиск элементов по местоположению.У меня есть несколько пользовательских маршрутов и правил перенаправления, чтобы предоставить пользователю удобный и понятный 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), но все еще не уверены, почему это происходит, и самое главное, как это решить.
Любая помощь будет высоко ценится