blazor - 由于 JavaScript,启动后 Blazor 自定义 AuthenticationStateAsync 调用失败
问题描述
我有 Blazor 服务器端程序,我通过从 JavaScript 读取令牌实现了自己的身份验证。
工作正常 - 除了在启动时读取失败(当然,因为服务器端渲染需要 OnAfterRender 用于 JavaScript 调用)。
但是这里的代码是由 Blazor 本身执行的并引发异常。
我该如何解决这个问题,这个调用不会在其他运行时(渲染后)上进行或运行?
谢谢
解决方案
JSInterop 只能在你的应用程序被渲染之后访问,而不是之前。要解决此问题,您需要从组件的 OnAfterRender 或 OnAfterRenderAsyn 方法调用 TokenStorageService.GetToken。这是一个代码片段来证明这一点:
@page "/mypage"
@inject TokenStorageService tokenService
@code{
protected override async Task OnAfterRenderAsyn (bool firstRender)
{
// Ensure that the app has been rendered, and it is the first
// render. Note also that this code is only executed once. And it
// won't be executed on recurring calls to the OnAfterRenderAsyn.
// This makes it an ideal place to initialize JavaScript objects.
if(firstRender)
{
var token = await TokenStorageService.GetToken();
}
}
}
推荐阅读
- javascript - 想要将数据存储在 reactJs 中以便更快地访问
- python - 找到一个充满给定项目的子列表并替换它
- php - 当值返回产品帖子数组时,查询 `meta_key` 的帖子标题,然后显示搜索词与链接的帖子标题匹配的帖子
- python - 我可以在 nn.Sequential 中解压一个 nn.ModuleList 吗?
- python - 在 Python 3 Windows 中与打印机交互的最佳方式是什么?
- spring-boot - 您可以从带注释的类生成二级索引 DDL 语句吗?
- microsoft-graph-api - Microsoft Graph - 获取消息 mime 时获取无效 ID
- android - Settings.Global.LOW_POWER_MODE 和 Settings.Global.LOW_POWER_MODE_STICKY 在 android 11 中获得低功耗模式的替代方法是什么?
- android-studio - 如何在 Android 上运行 JS 库
- alarm - 是否可以将数据添加到警报的详细信息中?