У меня есть следующий компонент бритвы
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() — это стандартный способ инициализации страницы?
Ну нет, тогда он не будет пытаться получить доступ к контроллеру API.
Ладно, кажется, я решил проблему. Если я добавлю параметр 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");
}
}
Чего-то здесь не хватает, если вы закомментируете вызов
GetFromJsonAsync
, вы не увидите 401?