在TypeFilterAttribute

时间:2017-05-15 18:14:04

标签: c# asp.net-core

我在ASP.NET Core中创建自定义授权属性。为此,我需要获取我的用户指南,我可以在UserManager中找到它。我该如何访问它?我可以在我的控制器中获取它,但不是在我认为的过滤器中。

我的代码如下所示:

public class CustomAuthorizeAttribute : TypeFilterAttribute
{
    public CustomAuthorizeAttribute(params string[] roles) : base(typeof(CustomAuthorizeFilter))
    {
        Arguments = new object[] { roles };
    }
}

public class CustomAuthorizeFilter : IAsyncActionFilter
{
    private string[] _roles;

    public CustomAuthorizeFilter(IReadOnlyList<object> arguments)
    {
        _roles = (string[])arguments;
    }

    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        var username = context.HttpContext.User.Claims.First().Value;
        //var roles = usermanager.

        var hasClaim = true; 
        if (!hasClaim)
        {
            context.Result = new UnauthorizedResult();

        }
        else
        {
            await next();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

TypeFilterAttribute修饰的过滤器可以使用内置DI来解析依赖关系。例如ILoggerFactory

public CustomAuthorizeFilter(
    IReadOnlyList<object> arguments, //this from attribute params
    ILoggerFactory loggerFactory     //this from DI
)
{
}

请确保您的UserManager已在DI中注册,并在CustomAuthorizeFilter构造函数中解析。