在MVC 5中没有触发基方法

本文关键字:方法 MVC | 更新日期: 2023-09-27 18:11:06

我有以下基本控制器

public class BaseController : Controller
{
   protected override void Execute(RequestContext requestContext)
   {
          base.Execute(requestContext);
   }
}

实现是

  public class HomeController : BaseController { }

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

在MVC 5中没有触发基方法

不完全清楚你想要什么,但这里有几个问题。你的普通控制器会继承你的BaseController吗?

public class MyController : BaseController

我不明白这行是什么意思....

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

你设置了值,然后不对它做任何事情。您是否打算将此值存储在基本控制器中,以便可以从所有其他控制器访问它?

当然,如果在querystring中缺少global,那么它应该是false而不是true。

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

这个问题的标题导致我在这里,但它不是真正相同的问题,我正在经历(即覆盖的Execute方法在一个基础控制器类不被调用在MVC 4/5网站)。

如果这是你也有问题,这是我找到的解决方案。随着异步支持的引入,这些方法的调用方式似乎发生了变化。而不是覆盖Execute方法,你应该覆盖OnActionExecuted方法代替。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
}