Зачем вызывать base.OnActionExecuting(filterContext);?

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

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

 base.OnActionExecuting(filterContext); 

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

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


person chobo2    schedule 19.06.2011    source источник


Ответы (2)


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

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

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

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

person Darin Dimitrov    schedule 19.06.2011

Я считаю, что если вы позволите Visual Studio автоматически создавать переопределяющий метод, набрав override и выбрав метод в IntelliSense и нажав вкладку, Visual Studio автоматически добавит base.MethodName() в тело метода.

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

person xTRUMANx    schedule 19.06.2011
comment
Я предполагаю, что вопрос будет заключаться в том, как вы узнаете, когда вам нужно позвонить на базу. Я действительно не знаю, что делает поведение по умолчанию, скажем, base.OnActionExecuted(). - person chobo2; 21.06.2011
comment
@chobo2: Похоже, Дарин Димитров ответил на этот вопрос выше (относительно поведения по умолчанию методов ActionFilter), и вы можете пометить его (более полный) ответ как принятый. - person xTRUMANx; 21.06.2011