如何在Controller的OnActionExecuting-method

时间:2018-02-01 10:03:48

标签: asp.net-core

我为ASP.NET Core应用程序创建了一个过滤器 MyFilterAttribute 。 正如您在下面的代码示例中所看到的,我在控制器上使用它,以便在执行所有操作之前执行过滤器。

此外,控制器还有一个自己的OnActionExecuting()方法。

我的问题是控制器的OnActionExecuting()在执行 MyFilterAttribute 之前执行,而我需要在控制器中的OnActionExecuting()之前执行 MyFilterAttribute 。有没有办法获得这种行为?我已经尝试将负序值分配给 MyFilterAttribute (因为它继承自ActionFilterAttribute,它实现了IOrderedFilter),但它没有帮助。

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext actionExecutingContext)
    {
        //do some checks
    }
}


[MyFilter]
public class MyController()
{
    [NonAction]
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if(currentUrl != urlThatDoesNotNeedChecks)
        {
            //do some checks
        }            
    }

    public IActionResult Index()
    {
        //read some data and return the view
    }
}

1 个答案:

答案 0 :(得分:0)

这一切都与不同过滤器相对于控制器执行的顺序有关。在ASP.NET Core中,您有几个不同的过滤器可供选择,按此顺序执行:

  • 授权过滤器
  • 资源过滤器
  • 动作过滤器

如果您更改过滤器以实现android:inputType="text" android:maxLines="1" 而不是IResourceFilter,那么它将在控制器的IActionFilter功能之前执行。

您可以在Filters in ASP.NET Core

了解更多相关信息