从动作过滤器调用控制器方法

时间:2014-01-27 17:53:23

标签: c# asp.net asp.net-mvc

我的基本控制器和动作过滤器位于相同的命名空间中但位于不同的类中。我在基本控制器内部创建了一个请求http标头的类,我想在我的动作过滤器中调用该方法。

如果我做了一个简单的Details dtls = GetHeaders(),那么intelliSense会询问我是否要在动作过滤器中创建另一个方法GetHeaders()

所以我的问题是我可以直接从动作过滤器调用GetHeaders()类中的BaseController方法吗?我该怎么办?如果没有,我该如何调用该方法?

namespace Infrastructure
{
    public class BaseController
    {
        public Details GetHeaders()
        {
            //Get the headers
        }
    }

    public class MyFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            //Call GetHeaders() to get Header1 data
        }
    }
}

2 个答案:

答案 0 :(得分:6)

您是否尝试从filterContext

获取控制器
var controller = filterContext.Controller as BaseController;

controller.GetHeaders();

答案 1 :(得分:0)

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        filterContext.HttpContext.Response.Redirect("~/BaseController/GetHeaders");
    }
}