Настраиваемое сообщение в ответе от ошибки контекста IAuthorizationRequirement - PullRequest
1 голос
/ 12 марта 2019

У меня есть специальное требование:

public sealed class MyRequirement : IAuthorizationRequirement
{
}

Который я прописываю в своей заявке:

.AddAuthorization(options =>
    options.AddPolicy(Policy.MyPolicy, policy => { policy.AddRequirements(new MyRequirement()); }))

И обработчик для этого имеет несколько проверок:

public sealed class MyHandler : AuthorizationHandler<MyRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
    {
        if (!context.User.HasClaim(c => c.Type == CustomClaimTypes.Status))
        {
            //_logger.Warning($"Status missing");
            context.Fail();
        }
        else
        {
            var rawStatus = context.User.Claims.Single(x => x.Type == CustomClaimTypes.Status).Value;
            EnumExtensions.TryParseNullable<Status>(rawStatus, true, out var status);

            switch (status)
            {
                case null:
                    //_logger.Warning($"Authentication forbidden: Unexpected  status: {rawStatus}");
                    context.Fail();
                    break;
                case Status.A:
                case Status.B:
                    //_logger.Warning($"Authentication forbidden: Invalid status: {status}");
                    context.Fail();
                    break;
                case Status.C:
                    context.Succeed(requirement);
                    break;
            }
        }

        return Task.CompletedTask;
    }
}

Это успешно возвращает 403, если контекст не работает, но я хочу добавить пользовательское сообщение в ответ, например текст, который находится в регистраторе.

Я гуглил это, и это выглядит почти невозможным, чего я не понимаю, так как это похоже на очень базовую функциональность.

Есть идеи, как добавить пользовательский текст в ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...