【问题标题】:Call controller method from action filter从动作过滤器调用控制器方法
【发布时间】:2014-01-27 17:53:23
【问题描述】:

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

如果我执行简单的Details dtls = GetHeaders(),智能感知会询问我是否要在操作过滤器内创建另一个方法GetHeaders()

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

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
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过从filterContext 获取控制器

    var controller = filterContext.Controller as BaseController;
    
    controller.GetHeaders();
    

    【讨论】:

    • 效果很好。谢谢!
    【解决方案2】:
    public class MyFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
    
            filterContext.HttpContext.Response.Redirect("~/BaseController/GetHeaders");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多