Выполнять код на каждый запрос - PullRequest
4 голосов
/ 30 ноября 2009

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

Мое единственное беспокойство в связи с этим подходом заключается в том, что тот, кто когда-либо создаст новый контроллер, должен будет наследовать базовый класс.

Есть ли способ зарегистрировать что-то в global.asax, как вы это делаете с пользовательскими связывателями моделей, которые будут запускаться при каждом запросе? Вроде как глобальный фильтр действий или что-то в этом роде.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2009

Вместо того, чтобы использовать базовый класс контроллера (который я считаю лучшим вариантом для большинства сценариев), вы можете использовать пользовательское действие, вызывающее действие . Я извлек бы из встроенного экшн-инвокера и добавил бы дополнительные вещи, которые вам нужны. Вы регистрируете вызывающее действие во время запуска приложения в global.asax, и оно может переопределить OnActionExecuting / OnActionExecuted / OnResultExecuting / OnResultExecuted. Вы можете, например, использовать OnResultExecuting для добавления некоторых ViewData. В этот момент вы будете знать, что действие выполнено, а также знаете тип ActionResult.

2 голосов
/ 30 ноября 2009

В global.asax вы можете добавить обработчик к Application_BeginRequest, который запускается перед каждым HTTP-запросом. Вы также можете создать пользовательский модуль HTTP для обработки того же.

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