Natknąłem się na dziwne zachowanie, ale nie jestem pewien, czy jestem na dobrej drodze.Filtry GlobalFilterCollection run before Filters of ControllerInstanceFilterProvider
Mam kontroler, który zastępuje metodę OnException
z klasy bazowej 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")
);
}
}
Mam też zwyczaj ExceptionFilter następująco:
public class HandleErrorCustom : IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"HandleErrorCustom Exception Message: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
Potem zarejestrował go jako filtr globalnej:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorCustom());
}
Czego oczekuje się tu na przykład kontrolera filtr do uruchomienia przed filtrem globalnym, ponieważ kolejność filtrów dostarczonych przez ControllerInstanceFilterProvider
to Int32.MinValue
it jego zakres to FilterScope.First
.
Jak wyjaśniono również tutaj: ASP.NET MVC 3 Service Location, Part 4: Filters
Ale wynik jest inny:
iisexpress.exe Informacja: 0: HandleErrorCustom Wyjątek Wiadomość: 06: 56: 49,972
iisexpress.exe Informacja: 0: ControllerFiltersController Wyjątek: 06:56: 49.974
To jest aplikacja ASP.NET MVC 4 i nie jestem świadomy żadnych zmian, które wpływają na zachowanie kolejności filtrowania ASP.NET MVC 3. Czego tu mi brakuje?
Teraz, mam to. Dlatego filtry, które mają niższą wartość i działają po stronie zwrotnej, będą uruchamiane jako pierwsze. Dzięki! – tugberk