使用 .net 核心应用程序实现自定义策略。
假设我们有一个非常简单的自定义策略:
internal class RequireNamePolicy : AuthorizationHandler<RequireNameRequirement>, IAuthorizationRequirement
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RequireNameRequirement requirement)
{
var nameClaim = context.User.Claims.FirstOrDefault(c => c.Type == Claims.Name);
if (nameClaim != null && nameClaim.Value == "Chimney Spork")
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
return Task.CompletedTask;
}
}
internal class RequireNameRequirement : IAuthorizationRequirement
{
}
Run Code Online (Sandbox Code Playgroud)
现在假设声明不存在,所以我们点击 context.Fail()。默认响应是没有消息正文的 403。
我的问题是,我们将在哪里更改状态代码(到 401)并返回说明问题的消息(即声明不存在)?