Я создал клиентское приложение Blazor
Нет, вы этого не сделали. Ваше приложение представляет собой серверное приложение Blazor (также известное как серверное приложение Blazor).
Поскольку ваше приложение основано на WebSocket-соединении, а не на HTTP, вы не можете и не должны пытаться получить доступ к HttpContext. объект. HttpContext не существует в приложении на основе SignalR, таком как используемое вами приложение (Blazor Server App).
Следующий фрагмент кода создает компонент Razor с именем Profile с параметром (значением маршрута) с именем ID, который вам следует передать вашему IAuthorizationHandler
Profile.razor
@page "/profile"
@page "/profile/{id}"
<AuthorizeView Policy="Place here the name of your policy"
Resource="@ID">
<NotAuthorized>
<h2 class="mt-5">You are not authorized to view this page</h2>
</NotAuthorized>
<Authorized>
<div class="container my-profile">
<h2>My Profile</h2>
--- Place here all the content you want your user to view ----
</div>
</Authorized>
</AuthorizeView>
@code {
[Parameter]
public string ID { get; set; }
}
Примечание для запоминания: идентификатор профиля передается в ваш метод обработчика через атрибут AuthorizeView.Resource
И в методе обработчика вы можете сделать что-то вроде этого:
public Task HandleAsync(AuthorizationHandlerContext context)
{
if (context == null) return Task.CompletedTask;
// get the profile id from resource, passed in from the profile page
// component
var resource = context.Resource?.ToString();
var hasParsed = int.TryParse(resource, out int profileID);
if (hasParsed)
{
// compare the requested profileID to the user's actual claim of
// profileID
var isAuthorized = profileID == context.User.GetProfileIDClaim();
-- --- I can't code blindly any more-----
}
}
Надеюсь, это поможет ..