Me encontré con un comportamiento extraño, pero no estoy seguro de si estoy en el camino correcto aquí.Filtros de GlobalFilterCollection ejecutados antes de los filtros de ControllerInstanceFilterProvider
Tengo un controlador que anula el método OnException
de la clase base 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")
);
}
}
Tengo también una costumbre ExceptionFilter de la siguiente manera:
public class HandleErrorCustom : IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"HandleErrorCustom Exception Message: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
Entonces, registrada como un filtro global:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorCustom());
}
Lo que esperaba es que aquí para la instancia controlador filtrar para ejecutar antes del filtro global ya que el orden de los filtros proporcionados por ControllerInstanceFilterProvider
es Int32.MinValue
yt El alcance de ellos es FilterScope.First
.
Como también se explica aquí: ASP.NET MVC 3 Service Location, Part 4: Filters
Pero el resultado es diferente:
información iisexpress.exe: 0: HandleErrorCustom Mensaje de excepción: 06: 56: 49.972
iisexpress.exe Información: 0: ControllerFiltersController Exception: 06: 56: 49.974
Esta es una aplicación ASP.NET MVC 4 y no conozco ningún cambio que afecte el comportamiento de ordenamiento del filtro de ASP.NET MVC 3. ¿Qué me falta aquí?
Ahora, lo tengo. Entonces, los filtros, que tienen el valor más bajo y se ejecutan en el lado de retorno de las acciones, se ejecutarán primero. ¡Gracias! – tugberk