代码之家  ›  专栏  ›  技术社区  ›  Giox

验证web api控制器是否需要以编程方式进行授权

  •  0
  • Giox  · 技术社区  · 3 年前

    为了简化我的生活,我禁用了一个系统中所有控制器的授权策略。Net Core 3.1 Web API项目,当环境等同于开发时,在启动文件中添加一些配置。

    控制器通过添加 [Authorize(AuthenticationSchemes = "Bearer")] 在他们之上。

    一切正常,但在控制器的所有操作中也有一些代码,用于检索已登录用户的用户名以记录请求。

    是否有办法在方法内部检查控制器是否需要授权(我正在生产)或不需要授权(我正在开发)?

    这对于单元测试也很有用。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Sayyed Dawood    3 年前

    是否有办法在方法内部检查控制器是否需要授权(我正在生产)或不需要授权(我正在开发)?

    我建议注射 IWebHostEnvironment 在控制器中,然后在操作中使用其扩展方法

    if (env.IsDevelopment())
     {
       // Do this 
     }
    

    或者,如果您想确定Authorize属性是否应用于控制器,那么您可以在操作方法中访问它

    var AuthorizedAttribute = typeof(MyController).CustomAttributes
                    .SingleOrDefault(x => x.AttributeType.FullName
                    .Contains("Microsoft.AspNetCore.Authorization.AuthorizeAttribute"));
    
                if (AuthorizedAttribute == null)
                {
                    //Do this or Don't do this
                }