【问题标题】:How to add IHttpContextAccessor to AuthorizationHandler如何将 IHttpContextAccessor 添加到 AuthorizationHandler
【发布时间】:2020-07-18 12:56:16
【问题描述】:

我正在尝试使用 httpContext 编写授权属性。

 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()));
            });

我的问题是我收到了这个错误:

没有给出与所需形式相对应的参数 参数“httpContextAccessor”的 'AuthorizationCheck.AuthorizationCheck(IHttpContextAccessor)'

【问题讨论】:

  • 您需要致电services.AddHttpContextAccessor(); 注册您的服务。
  • @asawyer 谢谢,但我已经有了。

标签: asp.net-core


【解决方案1】:

您正在错误地构建授权策略。根据official documentation,您应该添加一个也继承IAuthorizationRequirement 的附加类,然后在您的AuthorizationCheck 上,泛型类型参数应该是该附加类。示例如下:

public class AuthorizationCheck : AuthorizationHandler<IsAdminRequirement>, IAuthorizationRequirement
        {
    
            private readonly IHttpContextAccessor _httpContextAccessor;
    
            public AuthorizationCheck(IHttpContextAccessor httpContextAccessor)
            {
                _httpContextAccessor = httpContextAccessor;
            }
    }

public class IsAdminRequirement : IAuthorizationRequirement { }

最后,在添加您的策略时,您需要添加IsAdminRequirement。请注意,此需求应仅包含需求所需的数据/逻辑 - 实际处理程序 AuthorizationCheck 应包含对需求执行操作的依赖注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多