gpt4 book ai didi

.net - 来自 IAuthorizationRequirement 上下文失败的响应中的自定义消息

转载 作者:行者123 更新时间:2023-12-04 13:42:28 25 4
gpt4 key购买 nike

我有一个自定义要求:

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,但我想向响应添加自定义消息,例如记录器中的文本。

我一直在谷歌上搜索这个,它看起来几乎不可能,我不明白,因为它感觉像是非常基本的功能。

任何想法如何向响应添加自定义文本?

最佳答案

为延迟响应道歉。

我用这个解决了这个问题:

             switch (status)
{
case Status.A:
{
context.Succeed(requirement);
break;
}
default:
{
await SetForbiddenResultAsync(context.Resource);
context.Fail();
break;
}
}

在哪里
    private async Task SetForbiddenResultAsync(object resource)
{
var forbiddenResult = new ForbiddenEntityResult(new Error(resource.name));
mvcContext.Result = forbiddenResult;
await mvcContext.Result.ExecuteResultAsync(mvcContext);
}

ForbiddenEntityResult 只是一种结果类型,您可以将其替换为任何 ObjectResult。

在这里你还可以做日志记录,或者处理其他结果,比如未授权等

关于.net - 来自 IAuthorizationRequirement 上下文失败的响应中的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com