Пользовательская ошибка AuthenticationStateProviderService в localstorageC#

Место общения программистов C#
Ответить
Anonymous
 Пользовательская ошибка AuthenticationStateProviderService в localstorage

Сообщение Anonymous »


У меня есть 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 в настоящее время не могут быть выполнены. Это связано с тем, что цепь отключена и подлежит утилизации.

Как исправить эти ошибки, чтобы локальное хранилище работало должным образом?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»