首页 > 解决方案 > 在每次页面加载时首先需要调用的东西会在 blazor 中出现在哪里?

问题描述

我阅读了 blazor 生命周期文档,但我仍然不确定在哪里可以放置一些我绝对必须作为页面加载的第一件事执行的内容。

例如:

我正在实现一个简单的登录。我使用 localstorage 来保存经过身份验证的用户,其中一个对象字段是插入本地存储的时间,因此我可以将其与 DateTime.Now 进行比较,以查看如果用户按 f5 时对象是否过期。

比较需要作为页面加载的第一件事发生。所以我把它放到OnInitialized我所有页面使用的布局页面中。问题是OnInitialized子页面OnInitialized在布局页面之前被调用,并且孩子希望用户对象已经被设置为做这件事。

登录(主布局)

@inherits LayoutComponentBase;

<!--- material frame --->
            @Body
<!--- /material frame --->

@code
{

    protected override void OnInitialized()
    {
        Console.WriteLine("parent");
    }
}

考试(儿童)

@layout WebApp.Shared.Layouts.LoggedIn;

<! --- stuff ----.
@page "/app/examinations"
<! --- /stuff ----.
}

@code {


    protected override void OnInitialized()
    {
         Console.WriteLine("child");
     }

}

标签: blazor

解决方案


OnInitialized不应用于处理身份验证。但是,Blazor 具有内置的身份验证框架,您可以利用:

  1. 实现一个自定义的AuthenticationStateProvider,覆盖 GetAuthenticationStateAsync确定您的用户是否登录的逻辑。
  2. AuthenticationStateProvider在客户端启动中注册您的新 用户
  3. 将属性添加[Authorize]到需要登录的任何页面

微软完整文档在这里


推荐阅读