这是我的过滤器:
public class ABCFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
set();
base.OnActionExecuting(actionContext);
}
}
这是控制器继承的基本控制器:
public class BaseController : ApiController
{
public int abcd { get; private set; }
public void set()
{
abcd = 123;
}
我想调用基本控制器中的函数set()。这可能吗?我怎么能这样做?
答案 0 :(得分:1)
您可以尝试:
public class ABCFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
(actionContext.ControllerContext.Controller as BaseController).set(); //Retrieve the current controller from the context.
base.OnActionExecuting(actionContext);
}
}
但不建议这样做,因为动作过滤器旨在解决跨领域问题:Cross cutting concern example
像这样使用将过滤器与特定控制器一起使用,并且不能重复用于不是从BaseController
使用您的代码,我认为您可以在BaseController
构造函数中实现初始化逻辑。
public class BaseController : ApiController
{
public int abcd { get; private set; }
public BaseController()
{
set();
}
public void set()
{
abcd = 123;
}