2011-07-29 13 views
5

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?

Respuesta

0

Gracias por publicar esta pregunta! Créalo o no, MSDN documentation de Microsoft en esta característica sigue siendo incorrecta tres años más tarde.He enviado un bug report al equipo ASP.NET para solucionarlo.

Cuestiones relacionadas