首页 > 解决方案 > 由于 JavaScript,启动后 Blazor 自定义 AuthenticationStateAsync 调用失败

问题描述

我有 Blazor 服务器端程序,我通过从 JavaScript 读取令牌实现了自己的身份验证。

工作正常 - 除了在启动时读取失败(当然,因为服务器端渲染需要 OnAfterRender 用于 JavaScript 调用)。

但是这里的代码是由 Blazor 本身执行的并引发异常。

我该如何解决这个问题,这个调用不会在其他运行时(渲染后)上进行或运行?在此处输入图像描述

谢谢

标签: 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();
     }
 }
 }

推荐阅读