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

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

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

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

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

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

期待一些提示!

【问题讨论】:

    标签: routes components blazor webassembly


    【解决方案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/>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多