在 Blazor .NET 8 中,我在哪里加载和存储用户详细信息?

问题描述 投票:0回答:1

在 ASP.NET MVC 中,我处理了

session_start
事件来加载用户详细信息并将其存储在会话变量中,因此我不必在每次页面加载时查询数据库。

我正在尝试弄清楚如何在 .NET 8 上的 Blazor 中执行此操作。

我觉得

App.razor
是放置代码的好地方,因为它是在每次页面加载时执行的 - 但我不知道这是否是最佳实践?

我在

App.razor
(服务器代码)中的代码如下所示(我正在使用 Windows 身份验证):

@code {

    protected override async Task OnInitializedAsync()
    {
        UserDetails details;
        var user = (await AuthenticationStateProvider.GetAuthenticationStateAsync()).User;
        var userId = user.Identity?.Name?.ToLower();
        var result = await BrowserStorage.GetAsync<UserDetails>(userId);

        if (result.Success)
        {
            details = (UserDetails)result.Value;
        }
        else
        {
            GetUserDetailsQuery query = new GetUserDetailsQuery();
            query.UserLogin = await getUserId();
            details = query.Handle();
            await BrowserStorage.SetAsync(userId, details);
        }   
    }
}

但是我收到错误:

InvalidOperationException:此时无法发出 JavaScript 互操作调用。

你们是怎么解决这个问题的?您是否在每次页面加载时查询数据库以获取相同的信息?

blazor .net-8.0
1个回答
0
投票

JavaScript 调用仅在组件完全初始化后才可用。因此,仅应在渲染完成后调用互操作。即调用 OnAfterRender 之后的任何时间,并且这不是第一次渲染。

© www.soinside.com 2019 - 2024. All rights reserved.