在mvc 5中不触发base方法

时间:2014-07-01 04:20:15

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

我有以下基本控制器

public class BaseController : Controller
{
   protected override void Execute(RequestContext requestContext)
   {

          base.Execute(requestContext);
   }
}

实施

  public class HomeController : BaseController { }

我们从mvc3升级到mvc5,在mvc5中这个方法没有被调用,需要在这里做什么?

2 个答案:

答案 0 :(得分:2)

目前还不完全清楚你的追求是什么,但这里有几个问题。您的普通控制器是否继承了BaseController?

public class MyController : BaseController

我看不出这条线的意图....

var global = requestContext.HttpContext.Request.QueryString["global"] == null ? true : false;

您设置了值,然后不对其执行任何操作。您是否将此值存储在基本控制器中,以便可以从所有其他控制器访问它?

当然,如果查询字符串中缺少全局,那么它应该是假的而不是真的。

public class BaseController : Controller
{
   public bool isGlobal { get; private set; }

   protected override void Execute(RequestContext requestContext)
   {
      this.isGlobal = requestContext.HttpContext.Request.QueryString["global"] == null ? false : true;
      base.Execute(requestContext);
   }
}

答案 1 :(得分:1)

这个问题的标题引导我到这里,但它与我遇到的问题并不相同(即基础控制器类中被覆盖的Execute方法未在MVC中调用4/5网站)。

如果这也是你遇到的问题,这就是我找到的解决方案。通过引入Async支持,调用这些方法的方式似乎已经改变。您应该覆盖Execute方法,而不是覆盖OnActionExecuted方法。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
}