每当在控制器/方法上使用 AuthorizeAttribute 时执行过滤器

Posted

技术标签:

【中文标题】每当在控制器/方法上使用 AuthorizeAttribute 时执行过滤器【英文标题】:Execute filter whenever AuthorizeAttribute is used on a Controller/Method 【发布时间】:2021-02-03 02:45:52 【问题描述】:

所以我们有一堆使用 [Authorize] 属性的 API 控制器,我希望能够在使用该属性的任何地方执行过滤器(记录内容)。

我们有这个带有以下 sn-p 代码的 Ninject,但我们正试图从 Ninject 转移到 Autofac

kernel.BindHttpFilter<AuthLogFilter>(FilterScope.Action)
     .WhenActionMethodHas<AuthorizeAttribute>()
     .InSingletonScope();

AuthLogFilter 的剥离版本如下所示:

 public class AuthLogFilter : IActionFilter
    
        private readonly ILog _log;

        public AuthLogFilter(ILog log)
        
            _log = log;
        

        public async Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        
            ClaimsPrincipal principal = actionContext.RequestContext.Principal as ClaimsPrincipal;
            _log.Info("log some stuff about the principal");
        
    

如何使用本机过滤器做到这一点?或者使用 Autofac。

【问题讨论】:

【参考方案1】:

我能找到的唯一解决方案是以编程方式检查 OnActionExecuting 中的过滤器,如下所述 -

https://***.com/a/6117456/211718

【讨论】:

以上是关于每当在控制器/方法上使用 AuthorizeAttribute 时执行过滤器的主要内容,如果未能解决你的问题,请参考以下文章

从基本控制器重定向到操作方法

在asp.net核心中实现“维护模式”

Rails 应用程序在 localhost 上运行,但每当我检查 Web 浏览器时都会被拒绝连接

显示使用延迟作业一段时间后运行的方法

每当我发送消息时,它都会在反应中多次显示相同的消息

未应用 Amazon S3 图像缓存控制