我曾在.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()
将其与我的各个控制器的类型进行比较,但是我宁愿避免这种情况,而是指定哪个控制器应该使用哪个操作过滤器。
谢谢。
答案 0 :(得分:2)
services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })
当您要应用全局过滤器(这意味着每个API都会受到影响)时,将使用上述源代码。
因此,对于特定的特定控制器,您只需将[MyActionFilter]属性添加到您的控制器中
示例:
[MyActionFilter]
public class HomeController : Controller {
public ViewResult Index(){..}
}
答案 1 :(得分:1)
services.AddScoped<"---FilterNameHere----">();
[ServiceFilter(typeof("----FilterNameHere---"))]
public class HomeController : ControllerBase
{
public IActionResult Index()
{//do your code here}
}