Problema: Cuando utilizo la propiedad Order
del atributo HandleError
, el número de orden más alto se aplicó por primera vez, en comparación con el primero el más bajo.ASP.Net MVC 3 - ¿El atributo del orden en el atributo HandleError parece funcionar al revés?
detalles
Quiero configurar mi controlador para controlar las excepciones de esta manera:
- si el tipo de excepción es
CustomException
, utilice la vista "CustomError". - de lo contrario, utilice la vista predeterminada "Error".
Utilizando la plantilla de proyecto MVC por defecto, he hecho lo siguiente:
- retira el
HandleErrorAttribute
de los filtros globales. - Errores de personalización activados en el
web.config
.
Luego añadir estos atributos a la clase HomeController
:
[HandleError(ExceptionType = typeof(Exception), View = "Error")]
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")]
Y esto funciona bien - si un CustomException
se lanza, se muestra la vista "CustomError"; si se arroja un Exception
, se muestra la vista "Error".
Sin embargo, pensé que la propiedad Order
en el atributo HandleError
haría las cosas más explícitas. Desde el MSDN page:
Cuanto mayor es el valor entero es, menor es la prioridad del filtro es.
partir de esto, yo habría pensado que el siguiente código haría que el "error" vista que se muestra en todas las circunstancias:
[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")]
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")]
Pero este no es el caso; esto causa el mismo comportamiento que cuando la propiedad Order
no se ha especificado. Si cambio las Órdenes, este hace que se muestre la vista "Error", incluso si se lanzó un CustomException
.
Básicamente, la prioridad de la orden real parece ser exactamente lo contrario de la documentación. ¿Estoy haciendo algo mal o es esto un error?