C# 如何在aspnetcore标识中显示未经授权的消息

C# 如何在aspnetcore标识中显示未经授权的消息,c#,asp.net-core,asp.net-core-identity,C#,Asp.net Core,Asp.net Core Identity,我在aspnetcore 1.1中使用基于声明的身份验证和授权 如果用户未登录,他将按预期进入登录页面 但是,如果用户已登录,但没有正确的声明,则会再次将用户转发回登录页面 我如何更改该选项,以便将用户路由到另一个显示“您未经授权…”的视图 我认为这比应该的要复杂一些,但是你应该能够创建自己的过滤器。例如(未测试但编译): 然后像这样使用它: [ClaimRequirement("IsEDIAdmin", "/some-exciting/url")] public IActionResult

我在aspnetcore 1.1中使用基于声明的身份验证和授权

如果用户未登录,他将按预期进入登录页面

但是,如果用户已登录,但没有正确的声明,则会再次将用户转发回登录页面

我如何更改该选项,以便将用户路由到另一个显示“您未经授权…”的视图




我认为这比应该的要复杂一些,但是你应该能够创建自己的过滤器。例如(未测试但编译):

然后像这样使用它:

[ClaimRequirement("IsEDIAdmin", "/some-exciting/url")]
public IActionResult Index()
{
    //snip
}

很不错的!我会尽力的,请告诉我进展如何。
[Authorize(Policy = "IsEDIAdmin")]
public IActionResult App()
{
        return PartialView();
}
public class ClaimRequirementAttribute : TypeFilterAttribute
{
    public ClaimRequirementAttribute(string claim, string failUrl) : base(typeof(ClaimRequirementFilter))
    {
        Arguments = new object[] { claim, failUrl };
    }
}

public class ClaimRequirementFilter : IAsyncActionFilter
{
    private readonly string _claim;
    private readonly string _failUrl;

    public ClaimRequirementFilter(string claim, string failUrl)
    {
        _claim = claim;
        _failUrl = failUrl;
    }

    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        if (!context.HttpContext.User.Claims.Any(c => c.Value == _claim))
        {
            context.Result = new RedirectResult(_failUrl);
        }
        else
        {
            await next();
        }
    }
}
[ClaimRequirement("IsEDIAdmin", "/some-exciting/url")]
public IActionResult Index()
{
    //snip
}