Blazor 路由:如何防止通过 URL 直接访问组件

Posted

技术标签:

【中文标题】Blazor 路由:如何防止通过 URL 直接访问组件【英文标题】:Blazor Routing: How to prevent direct access to components via URL 【发布时间】:2021-10-05 21:07:58 【问题描述】:

我有一个基于标准模板的 blazor wasm 应用程序。在我的导航中,我有几个组件。由于应用程序的内容,我想阻止直接访问组件。

例如,通过使用以下链接来防止直接访问组件“myComponent”: https://www.example.com/myComponent

这是必要的,因为用户必须在应用程序中遵循严格的流程。

一旦我从组件中删除了 @page 指令,就无法通过 . 并且导航不再起作用。

进一步:如何首先从 url 中隐藏组件名称?

期待一些提示!

【问题讨论】:

【参考方案1】:

通过使用如下链接防止直接访问组件“myComponent”:https://www.example.com/myComponent

您可以通过添加@page "myComponent"来做到这一点 你想要的已经是默认行为了。

首先如何从 url 中隐藏组件名称?

当它是一个页面时,您将需要一些东西。但是你可以选择任何你想要的名字。

也许您可以通过页面和组件之间的区别来更新您的问题。并告诉我们您为什么不希望 URL 中包含哪些信息。

页面是具有一个或多个路由属性的组件 (@page "<url-patern>")

这是必要的,因为用户必须在应用程序中遵循严格的流程。

您可以构建“向导”:维护“步骤”并根据该值显示特定组件的主页。使用 EventCallback 前进或后退。

【讨论】:

但是如果没有@page 属性,如何通过导航访问页面呢? 不是。您可以通过多种方式在页面上显示组件。但是导航意味着使用 URL。【参考方案2】:

您可以使用 NavigationManager 将用户重定向到其他页面

示例:

@inject NavigationManager NavigationManager
 
@code
    ....
    protected async override void OnInitialized()  
         if(!isLogin) 
           NavigationManager.NavigateTo($"/login");
         
    

你也可以在渲染组件之前检查需求

例子

@if (isLogin)

    <myComponent/>

【讨论】:

以上是关于Blazor 路由:如何防止通过 URL 直接访问组件的主要内容,如果未能解决你的问题,请参考以下文章

如何防止通过url地址栏直接访问后台

如何防止用户直接在 express 中访问路由?

jsp防止直接通过url访问没有权限的页面

Blazor University (23)路由 —— 路由参数

如何防止文件直接 URL 访问?

Blazor University (26)路由 —— 通过代码导航