#routes #components #blazor #webassembly
Вопрос:
У меня есть приложение blazor wasm, основанное на стандартном шаблоне. В моей навигационной системе у меня есть несколько компонентов. Из-за содержимого приложения я хочу запретить прямой доступ к компоненту.
Например, предотвращение прямого доступа к компоненту «миКомпонент» с помощью такой ссылки, как: https://www.example.com/myComponent
Это необходимо, так как пользователь должен следовать строгому процессу в приложении.
Как только я удаляю директиву @page из компонента, он не может быть найден с помощью . и навигация больше не работает.
Кроме того: Как в первую очередь скрыть имя компонента из URL-адреса?
С нетерпением ждем некоторых подсказок!
Ответ №1:
предотвращение прямого доступа к компоненту «миКомпонент» с помощью такой ссылки, как: https://www.example.com/myComponent
Вы можете сделать это, не добавляя @page "myComponent"
То, что вам нужно, — это уже поведение по умолчанию.
Как в первую очередь скрыть имя компонента из URL-адреса?
Когда это страница, вам что-то понадобится. Но вы можете выбрать любое имя, какое захотите.
Возможно, вы сможете уточнить свой вопрос, указав различие между страницами и компонентами. И расскажите нам, почему вам не нужна информация о том, какая информация содержится в URL-адресах.
Страница-это компонент с одним или несколькими атрибутами маршрутизации ( @page "<url-patern>"
)
Это необходимо, так как пользователь должен следовать строгому процессу в приложении.
Вы можете создать «мастер»: главную страницу, которая поддерживает » шаг » и отображает конкретный компонент на основе этого значения. Используйте обратный вызов события, чтобы сделать шаг вперед или назад.
Комментарии:
1. Но как получить доступ к странице через навигацию, если без атрибута @page?
2. Нет. Вы можете отображать компонент на странице различными способами. Но навигация означает использование URL-адресов.
Ответ №2:
Вы можете использовать NavigationManager для перенаправления пользователя на другую страницу
пример:
@inject NavigationManager NavigationManager
@code{
....
protected async override void OnInitialized(){
if(!isLogin) {
NavigationManager.NavigateTo($"/login");
}
}
}
также вы можете проверить требование перед визуализацией компонента
Пример
@if (isLogin)
{
<myComponent/>
}