我可以使用WebAPI在onActionExecuting中调用一个方法吗?

时间:2016-03-12 03:25:09

标签: asp.net asp.net-web-api

这是我的过滤器:

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()。这可能吗?我怎么能这样做?

1 个答案:

答案 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;
    }