Ошибка аутентификации Blazor при использовании OnInitializedAsync

У меня есть следующий компонент бритвы

page "/test"
@using Microsoft.AspNetCore.Components.Authorization
@inject HttpClient Http

<h3>TestAuthPage</h3>

<AuthorizeView Roles = "admin">
    <Authorized>
        Hello
    </Authorized>
    <NotAuthorized>
        Not Auth
    </NotAuthorized>
</AuthorizeView>

@code {

    protected override async Task OnInitializedAsync()
    {
        var f = await Http.GetFromJsonAsync<List<string>>("api/test");
    }
}

Это выдает ошибку в браузере, так как выдает 401 при вызове API.

Однако, если я сделаю это

@page "/test"
@using Microsoft.AspNetCore.Components.Authorization
@inject HttpClient Http

<h3>TestAuthPage</h3>

<AuthorizeView Roles = "admin">
    <Authorized>
        Hello
        @if (sss().Result)
        {}
    </Authorized>
    <NotAuthorized>
        Not Auth
    </NotAuthorized>
</AuthorizeView>

@code {
    public async Task<bool> sss()
    {
        var f = await Http.GetFromJsonAsync<List<string>>("api/test");
        return true;
    } 
}

Контроллер API вызывается правильно.

Что, черт возьми, происходит? Конечно, OnInitializedAsync() — это стандартный способ инициализации страницы?

Чего-то здесь не хватает, если вы закомментируете вызов GetFromJsonAsync, вы не увидите 401?

mxmissile 17.03.2022 17:44

Ну нет, тогда он не будет пытаться получить доступ к контроллеру API.

coolblue2000 17.03.2022 18:02
Включение диаграмм Mermaid в Blazor WebAssembly и dotnet 7
Включение диаграмм Mermaid в Blazor WebAssembly и dotnet 7
Русалочьи диаграммы - это фантастика. MermaidJS предлагает все: диаграммы Ганнта, блок-схемы, круговые диаграммы и многое другое для вашего...
0
2
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ладно, кажется, я решил проблему. Если я добавлю параметр AuthenticationState, а затем ожидаю его в методе, тогда контроллер вызывается нормально, и я аутентифицируюсь на стороне контроллера. Я понятия не имею, почему это работает, но я предполагаю, что это должно быть время? Если кто-нибудь знает, почему это работает, пожалуйста, дайте мне знать...

@page "/test"
@using Microsoft.AspNetCore.Components.Authorization
@inject HttpClient Http

<h3>TestAuthPage</h3>

<AuthorizeView Roles = "admin">
    <Authorized>
        Hello
        @if (sss().Result)
        {}
    </Authorized>
    <NotAuthorized>
        Not Auth
    </NotAuthorized>
</AuthorizeView>

@code {
    [CascadingParameter]
    public Task<AuthenticationState> AuthState{ get; set; }

    protected override async Task OnInitializedAsync()
    {
        var t = await AuthState;
        var f = await Http.GetFromJsonAsync<List<string>>("api/test");
    }

}

Другие вопросы по теме