Маршрутизация Blazor: Как предотвратить прямой доступ к компонентам по URL

#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/>
}