我正在尝试为所有控制器上存在的一个名为Ping的健康终结点,对WebApi2控制器 中的所有方法添加身份验证。我的身份验证正常运行,但是我看不到应用排除的方法。
我想做类似下面的Exclude()的事情:
builder.Register(e => new MyCustomAuthFilter(
e.Resolve<IInjectedService>(),
e.Resolve<IAnotherService>()))
.AsWebApiAuthenticationFilterFor<MyController>()
.Exclude(Ping)
.InstancePerRequest();
builder.RegisterWebApiFilterProvider(config);
答案 0 :(得分:1)
不幸的是,目前没有针对每个项目的退出。您基本上可以附加到整个控制器或单个动作,但是仅此而已。
有一个long running issue,人们希望将单个过滤器注册附加到多个控制器的功能。我提出这一点是因为这也意味着您不能仅仅这样做:
// Doesn't work, this isn't a thing
builder.RegisterType<Filter>()
.AsWebApiAuthenticationFilterFor<Controller>(c => c.Get())
.AsWebApiAuthenticationFilterFor<Controller>(c => c.Post());
也就是说,就目前的情况而言,您无法就希望采用的方法进行讨论,而仅能完成这项工作。
还有一个long-running issue允许通过谓词附加过滤器。如果实现了,则可以执行以下操作:
// Doesn't work, this isn't a thing
builder.RegisterType<Filter>()
.AsWebApiAuthenticationFilterFor<Controller>(method => method.Name != "Delete");
不幸的是,还有很多工作要做,因此,如果没有社区in the form of PRs or some additional project owners的帮助,您可能很快就会看不到这些。
我能为您提供的最好的选择是将您的控制器分为两个不同的类-您要在一个控制器中覆盖的方法,而不是在另一个控制器中覆盖的方法。从通用基类派生两者以共享逻辑。