下面的代码是从这个职位复制的。我在其他帖子中看到了同样的情况,比如这个这个职位的答案。
为什么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();
}
}发布于 2019-06-06 19:40:29
简短回答:
目前,行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中更新代码的例子,不过在其他类似的场景中,它也是一个很好的最佳实践。
https://stackoverflow.com/questions/56482226
复制相似问题