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