У меня есть некоторые вещи, которые я делаю в методе OnActionExecuting в BaseController, что все мои другие контроллеры основаны на.
Я делаю несколько простых вещей, например, поместив переменную в ViewData, которая потребует "почти" всех моих представлений и заполняет пару свойств, которые используют мои контроллеры.
Вещь, которая меня беспокоит, эта работа выполняется даже при действиях, которые ей не нужны. Есть ли лучшее место для более эффективного выполнения этой работы? Если мне когда-нибудь понадобится что-то немного "тяжелее", чем то, что я делаю сейчас (т.е. Доступ к БД и т.д.).
UPDATE: Я более конкретно ссылаюсь на типичный сценарий контроллера. Там, где есть несколько действий, которые просто показывают представление. И некоторые из них принимают форму представления, выполняют некоторую работу и перенаправляют на другое действие.
В этом случае я хочу, чтобы действия, отображающие представления, использовали работу, выполняемую методом OnActionExecuting. Но действия, которые принимают представления формы, работа, выполняемая в OnActionExecuting, не используется, и поэтому просто добавляет ненужное время обработки.
Возможно, я не очень хорошо это объясняю... надеюсь, теперь это станет яснее.
ТИА!
Если вам проще выполнять действия в черном списке (путем атрибуции действий, для которых эта логика не должна выполняться), чем действия с белым списком, вы можете создать атрибут [SuppressWhateverLogic] и применить его к методам, которые вы хотите вложить в черный список. Затем измените свой метод OnActionExecuting(), чтобы искать этот атрибут (через ActionExecutingContext.ActionDescriptor.IsDefined()), и если атрибут существует, то выйдите из логики.
Если вам проще выполнять операции с белым списком, переместите логику из Controller.OnActionExecuting() и создайте собственный фильтр [MyLogic], выполнив подкласс ActionFilterAttribute. Добавьте логику в MyLogicAttribute.OnActionExecuting(), а затем укажите методы, которые вы хотите, с помощью [MyLogic], чтобы связать логику с этими методами.
Создайте второй "AdvancedBaseController", который происходит от BaseController?