我为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
}
}
答案 0 :(得分:0)
这一切都与不同过滤器相对于控制器执行的顺序有关。在ASP.NET Core中,您有几个不同的过滤器可供选择,按此顺序执行:
如果您更改过滤器以实现android:inputType="text"
android:maxLines="1"
而不是IResourceFilter
,那么它将在控制器的IActionFilter
功能之前执行。