我有两个抽象的api控制器,看起来很像这样:
[BaseActionFilter]
public abstract class ApiBaseController : ApiController
{
}
[StackActionFilter]
public abstract class StackApiBaseController : ApiBaseController
{
}
现在我正在使用2个动作过滤器来覆盖OnActionExecuting
方法并执行一些业务逻辑。
现在,当我使用从ApiBaseController
继承的控制器时,BaseActionFilter
工作得很好。
当我使用从StackApiBaseController
继承的控制器时,我遇到了问题。
我的问题是StackActionFilter
取决于BaseActionFilter
的结果,在我的情况下,之前 BaseActionFilter
跑(我认为“父亲”先跑)。
有什么方法可以在这里订一些订单吗?当我使用继承BaseActionFilter
的控制器时,我希望StackActionFilter
在StackApiBaseController
之前运行。
答案 0 :(得分:0)
我相信如果你将BaseActionFilter添加到StackApiController,它们将按照它们的应用顺序执行。
答案 1 :(得分:0)
一种方法是使 StackActionFilterAttribute 继承自 BaseactionFilterAttribute ,并仅将 StackActionFilterAttribute 应用于 StackApiBaseController
然后,您可以通过在 StackApiActionFilterAttribute 中放置base.OnActionExecuting调用的位置来控制顺序。
public override void OnActionExecuting(HttpActionContext actionContext)
{
//HERE
base.OnActionExecuting(actionContext);
//OR HERE
这并不理想,因为您需要从 ApiBaseController 中取出 BaseactionFilterAttribute ,因此无法控制直接从继承的任何控制器上强制执行的通用功能ApiBaseController 但它确实提供了所述问题的解决方案。