Почему OnActionExecuting вызывается из OnActionExecuting? - PullRequest
1 голос
/ 06 июня 2019

Код ниже был скопирован с этого поста .В других сообщениях я вижу то же самое, например, в ответе на этот этот пост .

Почему строка 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();
            }
}

1 Ответ

1 голос
/ 06 июня 2019

Краткий ответ:

в настоящее время строка 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, когда-либо произойдет, однако это служит хорошим передовым опытом в других аналогичные сценарии, а также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...