BeginRequest-подобный фильтр в MVC 3?
У меня есть некоторый код в моем приложении, который я должен выполнить на каждом запросе, прежде, чем что-либо другое выполнит (даже до аутентификации). До сих пор я использовал событие Application_BeginRequest
в моем глобальном.асакс, и это сработало отлично. Но этот код должен попасть в базу данных, и делать это из Global.асакс почему-то не чувствует себя хорошо. Кроме того, Нинект.NuGet для MVC3 я использую не впрыснуть зависимостей в конструктор моего класса HttpApplication.
Итак, я решил переместить этот код. в свой собственный глобальный фильтр действий. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что независимо от того, какой порядок или FilterScope я даю этому фильтру, я не могу заставить его выполнить первым; мой фильтр авторизации всегда бьет его. MSDN , похоже, подтверждает это:
Порядок Фильтрации
Фильтры выполняются в следующем порядке:
- фильтры авторизации
- фильтры действия
- фильтры ответов
- фильтры исключений
Для например, запускаются фильтры авторизации первый и фильтров исключений в прошлом. В пределах каждого типа фильтра порядок значение указывает порядок выполнения. Внутри каждый тип фильтра и порядок, область применения значение перечисления определяет порядок для фильтров.
Я знаю, что могу использовать HttpModule, но это не очень MVCish , поэтому я пытаюсь исчерпать все возможности, прежде чем идти по этому маршруту, что приводит к моему вопросу:
Существует ли эквивалент BeginRequest для глобальные фильтры действий?
1 ответ:
Это можно сделать в методе Initialize базового контроллера.
Еще одна возможность-зарегистрировать глобальный фильтр :
public class MyGlobalFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // that's gonna be hit } }
И в
RegisterGlobalFilters
случае вашегоGlobal.asax
:public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new MyGlobalFilter()); }