在blazor中,需要在每次页面加载时首先调用的东西会放在哪里?

在blazor中,需要在每次页面加载时首先调用的东西会放在哪里?,blazor,Blazor,我阅读了blazor lifecycle文档,但我仍然不确定我可以将一些我必须首先执行的东西放在哪里,作为页面加载的第一件事 例如: 我正在实现一个简单的登录。我使用localstorage保存经过身份验证的用户,其中一个对象字段是插入本地存储的时间,这样我就可以将它与DateTime进行比较。现在看看如果用户按f5,该对象是否过期 比较需要作为页面加载的第一件事进行。所以我把它放在我所有页面使用的布局页面的OnInitialized。问题是子页面的OnInitialized在布局页面的OnIn

我阅读了blazor lifecycle文档,但我仍然不确定我可以将一些我必须首先执行的东西放在哪里,作为页面加载的第一件事

例如:

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

比较需要作为页面加载的第一件事进行。所以我把它放在我所有页面使用的布局页面的
OnInitialized
。问题是子页面的
OnInitialized
在布局页面的
OnInitialized
之前被调用,并且子页面希望用户对象已经被设置为完成它的任务

LoggedIn(主布局)

@继承LayoutComponentBase;
@身体
@代码
{
受保护的覆盖无效OnInitialized()
{
Console.WriteLine(“母公司”);
}
}
考试(儿童)

@layout WebApp.Shared.Layouts.LoggedIn;

OnInitialized
不应用于处理身份验证。但是,Blazor内置了一个身份验证框架,您可以利用该框架:

  • 实现自定义的
    AuthenticationStateProvider
    ,覆盖
    getAuthenticationStateAncy
    ,具有确定 或者您的用户未登录
  • 注册您的新
    AuthenticationStateProvider
    在客户端启动中
  • 附加 任何需要登录的页面的
    [Authorize]
    属性

  • Microsoft

    您真正想知道的是,为什么不首先调用主布局中的
    OnInitialized
    ?是这样吗?是的。或者我的假设是错误的,我所描述的东西应该在blazor中以不同的方式处理。你能展示一下你是如何处理主布局的吗?@Vencovsky更新了这可能是错误的,但我不确定它是否解决了我的问题。我的问题不是身份验证我的问题是在应用程序中发生任何其他事情之前检查过期时间。我在文档中没有看到任何与此相关的内容,这使我相信它仍然需要手动完成(就像我现在所做的那样),这将使我面临同样的问题。我遗漏了什么吗?您应该检查您的授权令牌是否作为GetAuthenticationStateAync的一部分过期。如果用户没有身份验证令牌,或者身份验证令牌已过期,请返回匿名声明。
    @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");
         }
    
    }