Blazor эквивалентно OnActionExecuting? - PullRequest
0 голосов
/ 30 сентября 2019

В контроллерах MVC я бы перегрузил метод OnActionExecuting для проверки доступности прав доступа. Есть ли такое же поведение на стороне сервера Blazor при маршрутизации на бритвенные страницы без контроллеров?

public override void OnActionExecuting(ActionExecutingContext context)
{
    if (!context.IsAuthorized(out string message))
        context.Result = StatusCode((int)HttpStatusCode.Unauthorized, 
message);
    base.OnActionExecuting(context);
}

1 Ответ

0 голосов
/ 30 сентября 2019

Хотя я не уверен, что это лучший способ решить эту проблему (я хотел бы знать, если это так), я нашел обходной путь и, надеюсь, это может помочь кому-то еще

Iперехватил Found метод Router следующим образом:

@inject IUserContext User

<Router AppAssembly="typeof(Program).Assembly">
    <Found Context="routeData">
        @if (routeData.IsAuthorizedFor(User, out string message))
        {
            <RouteView RouteData="@routeData" DefaultLayout="typeof(MainLayout)" />
        }
        else
        {
            <LayoutView Layout="typeof(MainLayout)">
                <p>@message</p>
            </LayoutView>
        }
    </Found>
    <NotFound>
        <LayoutView Layout="typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>

Причина, по которой я не считаю это оптимальным, заключается в том, что это не похоже на код, который должен идти вбритвенный файл. Методы Router также не были виртуальными, потому что я действительно думал о создании собственного типа маршрутизатора, унаследованного от этого.

...