Как я могу показать неавторизованное представление, когда HttpClient получает 403 при вызове API в веб-сборке .NET BlazoC#

Место общения программистов C#
Anonymous
Как я могу показать неавторизованное представление, когда HttpClient получает 403 при вызове API в веб-сборке .NET Blazo

Сообщение Anonymous »

По сути, вот мой сценарий, которого я собираюсь достичь:
  • У меня есть два пользователя: A и B, у A есть разрешение на доступ к моему Restful API, разработанный с помощью веб-API ASP.NET Core, B не имеет разрешения на доступ к этому ресурсу API (API вернет 403).
  • В моем приложении Blazor Web Assembly есть страница, которая будет читать данные из этого Restful API, поэтому я бы хотел, чтобы, когда пользователь A входит в систему, он/она мог правильно получить доступ к этой странице, но когда B входит в систему, поскольку B не имеет доступа к API, поэтому, когда страница загружает и читает данные из API, на странице появляется ошибка 403, и вместо этого должно отображаться что-то вроде «У вас нет разрешения на доступ к странице»
Итак, в методе OnInitializedAsync на странице Blazor он использует внедренный IHttpClientFactory для создания HttpClient и выполняет вызов API:
/>

Код: Выделить всё

using var httpClient = HttpClientFactory.CreateClient("stickersHttpClient");
var httpResponseMessage = await httpClient.GetAsync($"api/stickers?page={pageNumber}&size={pageSize}");
httpResponseMessage.EnsureSuccessStatusCode();
var responseJson = await httpResponseMessage.Content.ReadAsStringAsync();
PageContent = JsonSerializer.Deserialize(responseJson);
Если эту страницу открывает пользователь Б, httpClient.GetAsync обязательно вернет ошибку 403, но вместо сообщения «У вас нет разрешения на просмотр этого» page" на странице, страница фактически сообщила об ошибке в консоли:
[img]https://i.sstatic. net/0bOrA4BC.png[/img]

Я уже применил @attribute [Authorize] на странице, и в App.razor он имеет следующее авторизованные настройки просмотра:

Код: Выделить всё





@if (context.User.Identity?.IsAuthenticated != true)
{

}
else
{
You don't have permission to view this page.
}





Not found

Sorry, there's nothing at this address.




Я думаю, что между API и страницей должен быть некоторый разрыв, должен быть способ, позволяющий моей бритвенной странице «знать» о 403, возвращаемой API, чтобы ее можно было применить представление маршрутизируемой аутентификации. Но я не знаю, как это сделать.
(Кстати, авторизация пользователя осуществляется через Keycloak с политикой, основанной на ролях пользователя)

Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-api-in

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