Пользовательская ошибка AuthenticationStateProviderService в localstorage ⇐ C#
-
Anonymous
Пользовательская ошибка AuthenticationStateProviderService в localstorage
У меня есть CustomAuthenticationStateProviderService. Сначала я использовал константу для хранения JWTToken, но теперь хочу переключиться на использование локального хранилища.
Константы публичного класса { общественная статическая строка JWTToken {get; набор; "=" } общедоступный класс CustomAuthenticationStateProviderService: AuthenticationStateProvider { частный ClaimsPrincipal только для чтения анонимный = новый (новый ClaimsIdentity()); частный только для чтения ProtectedLocalStorage localStorage; public CustomAuthenticationStateProviderService (ProtectedLocalStorage localStorage) { this.localStorage = localStorage; } общедоступное асинхронное переопределение Task GetAuthenticationStateAsync() { пытаться { var token = await localStorage.GetAsync("headerToken"); если (string.IsNullOrWhiteSpace(Constants.JWTToken)) return await Task.FromResult(new AuthenticationState(anonymous)); вар претензии = JWTService.DecryptToken(Constants.JWTToken); if (claims == null) return await Task.FromResult(new AuthenticationState(anonymous)); вар претензииПринципал = SetClaimPrincipal(претензии); return await Task.FromResult(new AuthenticationState(claimsPrincipal)); } поймать (Исключение ex) { return await Task.FromResult(new AuthenticationState(anonymous)); } } } У меня есть и другие методы внутри класса, но это единственный, с которым я пока начал использовать localstorage. Ошибка выдается еще до того, как она достигает первой страницы приложения, которая
'В настоящее время вызовы взаимодействия JavaScript не могут быть выполнены. Это связано с тем, что компонент отображается статически. Если предварительный рендеринг включен, вызовы взаимодействия JavaScript могут выполняться только во время метода жизненного цикла OnAfterRenderAsync.'
Я понимаю, что он хочет, чтобы я использовал метод OnAfterRenderAsync, но это происходит еще до того, как он перейдет на любую из моих страниц, так что это не поможет. Кроме того, мне нужно, чтобы он использовался в OnInitialized по логической причине, поэтому мои страницы используют @rendermode @(new InteractiveServerRenderMode(false))
Я окружил получение локального хранилища кнопкой try-catch, которая исправляет ситуацию. Я нашел ответ, в котором говорится, что такое поведение вызвано builder.Services.AddCascadingAuthenticationState();, который у меня есть в program.cs
попробуй { var token = await localStorage.GetAsync("headerToken"); } поймать (InvalidOperationException) { } Это устраняет первую проблему, но затем появляется новая ошибка: Вызовы взаимодействия JavaScript в настоящее время не могут быть выполнены. Это связано с тем, что цепь отключена и подлежит утилизации.
Как исправить эти ошибки, чтобы локальное хранилище работало должным образом?
У меня есть CustomAuthenticationStateProviderService. Сначала я использовал константу для хранения JWTToken, но теперь хочу переключиться на использование локального хранилища.
Константы публичного класса { общественная статическая строка JWTToken {get; набор; "=" } общедоступный класс CustomAuthenticationStateProviderService: AuthenticationStateProvider { частный ClaimsPrincipal только для чтения анонимный = новый (новый ClaimsIdentity()); частный только для чтения ProtectedLocalStorage localStorage; public CustomAuthenticationStateProviderService (ProtectedLocalStorage localStorage) { this.localStorage = localStorage; } общедоступное асинхронное переопределение Task GetAuthenticationStateAsync() { пытаться { var token = await localStorage.GetAsync("headerToken"); если (string.IsNullOrWhiteSpace(Constants.JWTToken)) return await Task.FromResult(new AuthenticationState(anonymous)); вар претензии = JWTService.DecryptToken(Constants.JWTToken); if (claims == null) return await Task.FromResult(new AuthenticationState(anonymous)); вар претензииПринципал = SetClaimPrincipal(претензии); return await Task.FromResult(new AuthenticationState(claimsPrincipal)); } поймать (Исключение ex) { return await Task.FromResult(new AuthenticationState(anonymous)); } } } У меня есть и другие методы внутри класса, но это единственный, с которым я пока начал использовать localstorage. Ошибка выдается еще до того, как она достигает первой страницы приложения, которая
'В настоящее время вызовы взаимодействия JavaScript не могут быть выполнены. Это связано с тем, что компонент отображается статически. Если предварительный рендеринг включен, вызовы взаимодействия JavaScript могут выполняться только во время метода жизненного цикла OnAfterRenderAsync.'
Я понимаю, что он хочет, чтобы я использовал метод OnAfterRenderAsync, но это происходит еще до того, как он перейдет на любую из моих страниц, так что это не поможет. Кроме того, мне нужно, чтобы он использовался в OnInitialized по логической причине, поэтому мои страницы используют @rendermode @(new InteractiveServerRenderMode(false))
Я окружил получение локального хранилища кнопкой try-catch, которая исправляет ситуацию. Я нашел ответ, в котором говорится, что такое поведение вызвано builder.Services.AddCascadingAuthenticationState();, который у меня есть в program.cs
попробуй { var token = await localStorage.GetAsync("headerToken"); } поймать (InvalidOperationException) { } Это устраняет первую проблему, но затем появляется новая ошибка: Вызовы взаимодействия JavaScript в настоящее время не могут быть выполнены. Это связано с тем, что цепь отключена и подлежит утилизации.
Как исправить эти ошибки, чтобы локальное хранилище работало должным образом?
Мобильная версия