Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么从OnActionExecuting内部调用OnActionExecuting?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 为什么从OnActionExecuting内部调用OnActionExecuting?

Asp.net mvc 为什么从OnActionExecuting内部调用OnActionExecuting?,asp.net-mvc,Asp.net Mvc,下面的代码是从中复制的。我在其他帖子中也看到了同样的事情,比如这篇文章的答案 为什么行base.onAction正在执行(filterContext)包含在整个OnActionExecuting方法中 它实现了什么目的 public class HomeController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext)

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

为什么行
base.onAction正在执行(filterContext)包含在整个
OnActionExecuting
方法中

它实现了什么目的

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

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

简短回答:

当前,行
base.OnActionExecuting(filterContext)
不执行任何操作(不执行任何工作)。无论是否使用该行,功能行为都将相同

更长的回答:

Controller.OnActionExecuting
的.NET源代码如下(摘自):

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


作为旁注,.NET framework现在处于维护模式,因此我高度怀疑上面提到的.NET framework在
Controller.OnActionExecuting
中更新代码的示例是否会发生,但是它在其他类似场景中也是一个很好的最佳实践

我认为这个问题可能与您的问题相同,或者至少有一个答案可以帮助您:要在这里添加一些详细信息,请链接到
Controller.cs
类,该类调用
base.OnActionExecution(filterContext)
。它是一个空的虚拟方法,所以在您的情况下,如果您调用它或不调用它,它实际上目前并没有什么区别。但是,假设将来您升级.NET版本,并且该升级在
Controller.OnActionExecuting
方法中包含一些代码,那么新代码将不会被调用,并且可能会出现一些异常情况。太长,读不下去了即使它现在什么也不做,我还是会叫它。作为补充说明,.NET Core目前正在开发中,框架处于维护模式,因此我非常怀疑是否会发布任何新的.NET framework版本,也怀疑您是否会遇到上述特定用例。但在其他类似场景中,这是一个很好的实践well@GregH我想我明白了。我仍在学习如何深入挖掘提供的框架;有时,现有代码的数量是巨大的。似乎你是说框架中可能有对OnActionExecution很重要的代码,但目前没有,所以什么也没有发生,但是如果添加了新代码,没有那行代码,我会错过它&这可能会导致中断。新的框架代码是否也可能导致中断?你的评论比上面第一条评论中提到的帖子解释得更好,尽管这是一个很好的参考。也许你应该把它写在这里作为答案。@Alan你的理解是正确的。另外,新的框架代码可能会导致某些东西出现故障,这是有道理的,但是这种情况通常比不调用
base.OnActionExecuting
而某些东西出现故障时更容易发现和修复。
protected virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
}