为了简化我的生活,我禁用了一个系统中所有控制器的授权策略。Net Core 3.1 Web API项目,当环境等同于开发时,在启动文件中添加一些配置。
控制器通过添加 [Authorize(AuthenticationSchemes = "Bearer")] 在他们之上。
[Authorize(AuthenticationSchemes = "Bearer")]
一切正常,但在控制器的所有操作中也有一些代码,用于检索已登录用户的用户名以记录请求。
是否有办法在方法内部检查控制器是否需要授权(我正在生产)或不需要授权(我正在开发)?
这对于单元测试也很有用。
我建议注射 IWebHostEnvironment 在控制器中,然后在操作中使用其扩展方法
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 }