Я наткнулся на странное поведение, но я не уверен, что я нахожусь на правильном пути здесь.Фильтры GlobalFilterCollection запускаются до фильтров ControllerInstanceFilterProvider
У меня есть контроллер, который переопределяет OnException
метод базового класса Controller
.
public class ControllerFiltersController : Controller {
public ActionResult Index() {
throw new NotImplementedException();
}
protected override void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"ControllerFiltersController Exception: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
У меня также есть обычай ExceptionFilter следующим образом:
public class HandleErrorCustom : IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"HandleErrorCustom Exception Message: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
Затем я зарегистрировал его в качестве глобального фильтра:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorCustom());
}
Что я ожидал здесь для экземпляра контроллера фильтр для запуска перед глобальным фильтром, так как порядок фильтров, который предоставляется ControllerInstanceFilterProvider
, составляет Int32.MinValue
и t его объем составляет FilterScope.First
.
Как также описано здесь: ASP.NET MVC 3 Service Location, Part 4: Filters
Но результат отличается:
iisexpress.exe Информация: 0: HandleErrorCustom Сообщение исключения: 06: 56: 49,972
iisexpress.exe Информация: 0: ControllerFiltersController Исключение: 06: 56: 49.974
Это приложение ASP.NET MVC 4, и я не знаю никаких изменений, влияющих на поведение упорядочивания фильтра ASP.NET MVC 3. Что мне здесь не хватает?
Теперь, я понял. Таким образом, фильтры, которые имеют меньшее значение и работают с обратной стороны действий, будут работать в первую очередь. Благодаря! – tugberk