每当在 Controller/Method 上使用 AuthorizeAttribute 时执行过滤器

Execute filter whenever AuthorizeAttribute is used on a Controller/Method

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

我们有这个 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。

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