以下代码是从this post复制而来的。我在其他帖子中看到了同样的事情,例如对此this post的回答。
为什么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();
}
}
答案 0 :(得分:1)
简短答案:
当前,行base.OnActionExecuting(filterContext)
不执行任何操作(不执行任何操作)。无论有无行,功能行为都是相同的。
更长的答案:
Controller.OnActionExecuting
的.NET源代码如下(取自here):
protected virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
}
如果您查看OnActionExecuting
方法,您会发现此方法完全为空。这是base.OnActionExecuting(filterContext)
正在调用的代码/方法。您没有必须呼叫base.OnActionExecuting(filterContext)
,因为它目前不执行任何操作,但是我建议您这样做。其背后的原因是,如果更新.NET框架,使得Controller.OnActionExecuting
方法实际上在其中需要代码,则在不包含相关行的情况下将不会调用所需代码。这可能导致某些情况下调试起来非常困难且耗时。当然,也有可能引入新的框架代码,当您调用base.OnActionExecuting
时,它们确实会破坏您的代码,但是这种情况通常比其他情况更容易发现和修复。当然,最后,归根结底是该框架引入了什么代码,以及该框架打破了什么,以使其易于识别和解决。
作为一个附带说明,.NET框架现在处于维护模式,因此,我高度怀疑我上面提到的使用.NET框架更新Controller.OnActionExecuting
中的代码的示例是否会发生,但是它是一种很好的最佳实践在其他类似情况下也是如此。