Asp.net core 如何将IHttpContextAccessor添加到AuthorizationHandler
我正在尝试使用httpContext编写授权属性Asp.net core 如何将IHttpContextAccessor添加到AuthorizationHandler,asp.net-core,Asp.net Core,我正在尝试使用httpContext编写授权属性 public class AuthorizationCheck : AuthorizationHandler<AuthorizationCheck>, IAuthorizationRequirement { private readonly IHttpContextAccessor _httpContextAccessor; public Autho
public class AuthorizationCheck : AuthorizationHandler<AuthorizationCheck>, IAuthorizationRequirement
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AuthorizationCheck(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
services.AddHttpContextAccessor();
services.AddSingleton<IAuthorizationHandler, AuthorizationCheck>();
services.AddAuthorization(options =>
{
options.AddPolicy("AuthorizationCheck",
policy => policy.Requirements.Add(new AuthorizationCheck()));
});
公共类授权检查:授权处理程序,IAAuthorizationRequirement
{
专用只读IHttpContextAccessor\u httpContextAccessor;
公共授权检查(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor;
}
}
AddHttpContextAccessor();
services.AddSingleton();
services.AddAuthorization(选项=>
{
options.AddPolicy(“授权检查”,
policy=>policy.Requirements.Add(newauthorizationcheck());
});
我的问题是我得到了这个错误:
没有给出与所需的形式化参数相对应的参数
的参数“httpContextAccessor”
'授权检查。授权检查(IHttpContextAccessor)'
您构建的授权策略不正确。根据,您应该添加一个额外的类,该类也继承
IAuthorizationRequirement
,然后在AuthorizationCheck
上,泛型类型参数应该是该额外的类。示例如下:
public class AuthorizationCheck : AuthorizationHandler<IsAdminRequirement>, IAuthorizationRequirement
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AuthorizationCheck(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
public class IsAdminRequirement : IAuthorizationRequirement { }
公共类授权检查:授权处理程序,IAAuthorizationRequirement
{
专用只读IHttpContextAccessor\u httpContextAccessor;
公共授权检查(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor;
}
}
公共类IsAdminRequirement:IAAuthorizationRequirement{}
最后,在添加策略时,您需要添加
IsAdminRequirement
。请注意,此需求应仅包含需求所需的数据/逻辑-实际处理程序,AuthorizationCheck
应包含对需求执行操作的依赖项注入。您需要调用services.AddHttpContextAccessor()代码>您注册服务的地方。@asawyer谢谢,但我已经有了。