【发布时间】:2018-09-26 10:29:39
【问题描述】:
我曾在 .Net 4 上使用 MVC,并且在控制器类中覆盖了我的操作过滤器。这样我就可以拥有多个控制器,每个控制器都有一个独特的OnActionExecuting 方法。
现在我正在开发 Dotnet Core 2.1,但情况有些不同,因此我无法使用相同的方法。
我有一个用于继承 ControllerBase 的 API 的控制器,然后是另一个用于服务页面的控制器,它继承了 Controller。
我创建了派生自 ActionFilterAttribute 的操作过滤器类。
然后我使用此行注册了我的操作过滤器:
services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })
问题在于过滤器现在适用于 API 控制器以及页面控制器。有没有办法只将动作过滤器应用于特定的控制器?
我使用this page 作为我的初始操作过滤器实现的参考。
我知道在 OnActionExecuting 方法中,我可以使用 context.Controller.GetType() 将其与我的各个控制器的类型进行比较,但我宁愿避免这种情况,而是指定哪些控制器应该使用哪些操作过滤器。
提前致谢。
【问题讨论】:
-
使用属性来标记你想要应用过滤器的控制器。它在您在问题中提供的文档页面上进行了描述
-
@maxs87 我试过了,例如。
[ServiceFilter(typeof(MyActionFilter))]但它抱怨过滤器未注册 - 我也跳过了这个:config.Filters.Add(typeof(MyActionFilter))
标签: c# .net-core asp.net-core-mvc