我想做一些类似于我在 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>
所以我可以在这里添加一个代码块,但我不确定我是否可以知道我的用户在执行时是否通过了身份验证。我想知道我是否可以在应用程序的布局文件中执行此操作,或者是否有更好的位置来进行此预加载。
由于对 Blazor 服务器应用程序的初始请求不是通过 SignalR 连接执行的,而是通过 HTTP 执行的,因此您可以执行各种任务,包括从数据存储中检索数据,并以属性集的形式将此数据传递到您的 Blazor 应用程序在组件 Html taghelper 上,位于 _Host.cshtml 文件中。
请注意,当您执行 _Host.cshtml 文件中的代码时,您位于 Razor Pages 应用程序域中,而不是 Blazor 中。
您应该在 App 组件中定义适当的属性,以接收组件 Html taghelper 中设置的传递值。现在您可以使用这些值或/并将它们存储在本地存储或会话存储中以供以后使用。
这是我回答如何做到这一点的链接。如果您需要的话,请随时寻求帮助...
我还尝试在 razor 交互模式页面上的 oninitializedasync 方法下获取用户详细信息和身份验证的会话数据,但由于 Js 互操作错误而无法获取。请指导我如何逐步进行操作。