首页 > 解决方案 > 为什么从 OnActionExecuting 中调用 OnActionExecuting?

问题描述

下面的代码是从这篇文章中复制的。我在其他帖子中看到同样的事情,例如在这个帖子的答案中。

为什么该行base.OnActionExecuting(filterContext);包含在整体OnActionExecuting方法中?

它实现什么目的?

public class HomeController : Controller
    {
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // do some irrelevant stuff
                base.OnActionExecuting(filterContext);           
            }

    public ActionResult Index()
            {            
                return View();
            }
}

标签: asp.net-mvc

解决方案


简短的回答:

目前,该行base.OnActionExecuting(filterContext)不执行任何操作(不执行任何操作)。无论有没有这条线,功能行为都是​​一样的。

更长的答案:

.NET 源代码Controller.OnActionExecuting如下所示(取自此处):

protected virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
}

如果你看一下这个OnActionExecuting方法,你会发现这个方法是完全空的。这是base.OnActionExecuting(filterContext)正在调用的代码/方法。您不必打电话,因为它目前什么都不做,但我建议您这样做base.OnActionExecuting(filterContext)这背后的原因是,如果更新了 .NET 框架,使得该Controller.OnActionExecuting方法实际上需要其中的代码,那么在不包含相关行的情况下将不会调用所需的代码。这可能会导致一些调试非常困难和耗时的场景。当然也有可能引入新的框架代码,当您调用时会破坏您的代码base.OnActionExecuting但是,这种情况通常比其他情况更容易发现和修复。当然,最终,这一切都将归结为框架引入了哪些代码以及它破坏了什么,以便识别和解决它的难易程度。

附带说明一下,.NET 框架现在处于维护模式,所以我非常怀疑我上面提到的 .NET 框架更新代码的示例Controller.OnActionExecuting是否会发生,但它在其他类似场景中也可以作为一个很好的最佳实践。


推荐阅读