每当在控制器/方法上使用 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 时执行过滤器的主要内容,如果未能解决你的问题,请参考以下文章