Зачем вызывать base.OnActionExecuting (filterContext) ;? - PullRequest
34 голосов
/ 19 июня 2011

Я просто смотрю на мой старый код и у меня есть фильтр действий (метод OnActionExecuting)

и в конце у меня есть

 base.OnActionExecuting(filterContext); 

Зачем искать вокруг, я вижу это довольно много раз. Я также вижу, что в моем старом теге Authorize я вызываю базу.

Должен ли я всегда вызывать базовые методы после?

Ответы [ 2 ]

58 голосов
/ 19 июня 2011

Должен ли я всегда вызывать базовые методы после?

Это будет зависеть от ситуации.

Например, в фильтрах авторизации (производных от AuthorizeAttribute), если вы вызываете базовый метод, будет выполняться вся существующая логика авторизации, встроенная в ASP.NET MVC.Если вы не позвоните, будет применяться только ваша логика авторизации.

Что касается других стандартных фильтров действий (производных от ActionFilterAttribute), то все OnActionExecuting, OnActionExecuted, OnResultExecuting и OnResultExecuted определены как виртуальные, но их тело пусто, поэтомуэто не имеет никакого значения, если вы вызываете или нет базовый метод.

1 голос
/ 19 июня 2011

Полагаю, если вы позволите Visual Studio автоматически создавать метод переопределения, набрав override и выбрав метод в intellisense и нажав клавишу Tab, Visual Studio автоматически добавит base.MethodName() в тело метода.

Еслитебе это не нужно, убери это.Я всегда удалял его при создании своих ActionFilter и у меня еще не было проблем.Единственный раз, когда вы не должны удалять его, это когда вам нужен базовый метод для вызова.

...