2010-01-15 13 views
12

Tengo un filtro de excepción personalizado que estoy utilizando para capturar una excepción personalizada que escribí, pero por alguna razón cuando lanzo mi excepción, nunca llega al filtro . En su lugar, me sale un error de que mi excepción no fue manejada por el código de usuario. ¿Alguien puede proporcionar algún consejo/asistencia sobre cómo debería tener esto configurado? código en cuestión es el siguiente:Filtro de excepción personalizado no se ve afectado en asp.net MVC

// controller  
[CustomExceptionFilter] 
    public class SomeController : Controller 
    {  
     public SomeController() 
     { 

     } 
     public ActionResult Index() 
     { 
      SomeClass.SomeStaticMethod(); 
      return View(); 
     } 
    } 

que es el controlador con el atributo customexception

// some class (where exception is being thrown) 
public class SomeClass 
{ 
    public static void SomeStaticMethod() 
    { 
     throw new MyCustomException("Test"); 
    } 
} 

que es la clase (para mi prueba) que produce la excepción (También he intentado tirar directamente en el controlador)

// Custom exception filter (want this to catch all unhandled exceptions) 
public class CustomExceptionFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.GetType() == typeof(MyCustomException)) 
     { 
      // do stuff 
     } 
    } 
} 

ese es el filtro de excepción personalizado ... nunca se llega cuando se ejecuta el código y se produce la excepción. En cambio, aparece el error mencionado anteriormente. Todo lo que he leído indica que esta es la forma correcta de configurar esto, pero cuando pongo puntos de interrupción en mi filtro personalizado, nunca se golpea ...

¿Qué me falta aquí?

TIA

Respuesta

7

Una vez que usted ha manejado su error, es necesario dejar que el contexto filtro sabe que se ha manejado. De esta manera:

filterContext.ExceptionHandled = true; 

Esto debería estar en su sección '// hacer cosas'.

He copiado su código, y el filtro se está llamando bien. La única diferencia que hice fue que agregué el código exceptionHandled y agregué mi punto de interrupción en esa línea.

+0

Afortunadamente todavía estás siguiendo esto a pesar de que tiene 4 días. Acabo de volver a esto y agregué tu línea de código dentro de mi bloque if ... nunca se llegó, ya que nunca se llama a mi método OnException. ¿Hay algún indicador que deba configurar (quizás en web.config) o algo para decirle a la aplicación que maneje las excepciones en este filtro? Todavía recibo el error en la línea "throw new MyCustomException (" Test ");" que indica que la excepción no fue controlada por el código de usuario. – Kyle

+1

No necesité establecer ninguna marca ni agregar nada a web.config. Simplemente funcionó. Cuando paso en el modo de depuración: Primero se lanza la excepción y se rompe allí. Luego presiono play y pasa a mi punto de interrupción en OnException. ¿Has intentado entrar en el modo de depuración? –

+0

Supongo que todo está en el mismo espacio de nombres y solo tiene una CustomExceptionFilter y CustomException. –

Cuestiones relacionadas