我在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();
}
}
}
答案 0 :(得分:1)
由TypeFilterAttribute
修饰的过滤器可以使用内置DI来解析依赖关系。例如ILoggerFactory
:
public CustomAuthorizeFilter(
IReadOnlyList<object> arguments, //this from attribute params
ILoggerFactory loggerFactory //this from DI
)
{
}
请确保您的UserManager
已在DI中注册,并在CustomAuthorizeFilter
构造函数中解析。