Маршрут к /login и /{PageName} в asp.net приложение не работает

#asp.net #routes #blazor-server-side

#asp.net #маршруты #blazor-на стороне сервера

Вопрос:

В ASP.NET Приложение Blazor с идентификатором У меня есть страница с маршрутизацией страниц

 @page "/{PageName}"
  

Когда я меняю маршрутизацию страницы страницы входа в Areas/Identity/Pages/Login.cshtml на

 @page "/login"
  

и введите URL ‘localhost:44397/login’, страница входа в систему отображается, как и ожидалось.

Однако, если я перейду по ссылке в строке заголовка, к которой я адаптировался LoginDisplay.razor <a href="login">Log in</a> , URL-адрес изменится на ‘localhost:44397/login’, как и ожидалось, но страница входа в систему не отображается. Вместо этого отображается страница выше, где PageName для параметра установлено значение «login».

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

Ответ №1:

Согласно этой статье, щелчок по гиперссылке в компоненте Blazor перехватывается автоматически. Пока URL-адрес в браузере обновляется, запрос не отправляется в браузер, но страница отображается с помощью Blazor . В моем случае Blazor может найти подходящую страницу (ту @page "/{PageName}" , на которой указана директива) и отобразить ее.

Для принудительной загрузки страницы NavigationManager можно использовать:

 <a href="login" @onclick="@(() => navigationManager.NavigateTo("/login", true))">Login</a>
  

Это href необходимо для отображения ссылки в типичном макете. Вероятно, это не самое элегантное решение, но, по крайней мере, оно работает.