在 blazor 服务器中预加载数据的最佳方法

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

我想做一些类似于我在 React 中可以做的事情。在 React 中,在应用程序渲染之前,我可以调用一个函数来从服务器请求数据(将在应用程序中的任何地方使用的数据)。例如公司 ID 之类的东西。

所以我的一个想法是让我的所有页面都需要身份验证。因此,未经身份验证的用户将进入,身份验证会将用户发送到脚手架的身份 Razor 页面,然后 Razor 页面将通过返回 URL 将用户发送回来。

我希望能够在重定向后渲染任何 blazor 组件之前加载我最喜欢的公司 ID(存储在数据库中),并且我希望渲染一个加载程序直到它完成,并且我可以在应用程序中的任何位置安全地访问我的公司 ID,而无需使用它为空。

我主要想了解 blazor 服务器中渲染的执行顺序,以了解在用户与我的应用程序交互之前可以在哪里预加载数据。我以为

在 blazor 服务器应用程序中哪个位置是执行此操作的最佳位置?

我有两个可能的地方可以进行预加载,要么在 App.razor 上

<MaterialStyles />

<ThemeProvider Theme="@Theme.Light" />

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

所以我可以在这里添加一个代码块,但我不确定我是否可以知道我的用户在执行时是否通过了身份验证。我想知道我是否可以在应用程序的布局文件中执行此操作,或者是否有更好的位置来进行此预加载。

asp.net-core blazor blazor-server-side
2个回答
3
投票

由于对 Blazor 服务器应用程序的初始请求不是通过 SignalR 连接执行的,而是通过 HTTP 执行的,因此您可以执行各种任务,包括从数据存储中检索数据,并以属性集的形式将此数据传递到您的 Blazor 应用程序在组件 Html taghelper 上,位于 _Host.cshtml 文件中。

请注意,当您执行 _Host.cshtml 文件中的代码时,您位于 Razor Pages 应用程序域中,而不是 Blazor 中。

您应该在 App 组件中定义适当的属性,以接收组件 Html taghelper 中设置的传递值。现在您可以使用这些值或/并将它们存储在本地存储或会话存储中以供以后使用。

这是我回答如何做到这一点的链接。如果您需要的话,请随时寻求帮助...


0
投票

我还尝试在 razor 交互模式页面上的 oninitializedasync 方法下获取用户详细信息和身份验证的会话数据,但由于 Js 互操作错误而无法获取。请指导我如何逐步进行操作。

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