[我有Blazor服务器端程序,通过从JavaScript读取令牌,我实现了自己的身份验证。
工作正常-除非在启动时读取失败(当然,这是因为服务器端渲染需要OnAfterRender进行JavaScript调用),但启动失败除外。
但是这里的代码是由Blazor本身执行的,并引发异常。
我该如何解决,该调用不会在其他运行时(渲染后)上执行或运行?
Thx
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();
}
}
}