作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义要求:
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;
}
}
最佳答案
为延迟响应道歉。
我用这个解决了这个问题:
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);
}
关于.net - 来自 IAuthorizationRequirement 上下文失败的响应中的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125568/
我有一个自定义要求: public sealed class MyRequirement : IAuthorizationRequirement { } 我在我的应用程序中注册的: .AddAutho
我正在尝试创建一个新的授权要求,但它必须使用我在 ConfigureServices 中声明的服务之一,而且我不知道如何使用与声明服务相同的方法将该服务传递给新要求。 public class New
我是一名优秀的程序员,十分优秀!