2010-05-05 14 views

Respuesta

-2

Compruebe la pila de llamadas de la excepción.

Por ejemplo:

var actionMethod = new StackTrace(exception) 
    .GetFrames().FirstOrDefault(f => 
     typeof(IController).IsAssignableFrom(f.GetMethod().DeclaringType) 
    ).GetMethod(); 
+1

No hagas esto; el ExceptionContext proporciona una manera mucho más simple, limpia y eficiente de acceder al nombre y la acción del controlador según la respuesta de OdeToCode a continuación. –

+0

@ChristopherKing: Siempre que tenga ese contexto disponible. – SLaks

+4

Lo cual creo que hace, según el enunciado de que está manejando los errores en el método OnException. –

-4

añade el siguiente método en su global.asax y poner un punto de quiebre en él

public void Application_Error(object sender, EventArgs e) 
    { 


    } 

No importa en qué lugar de la aplicación se produce un error, el punto de ruptura en este método será golpeado. Desde aquí se puede ver el valor de la siguiente expresión en la ventana de inspección rápida y usted sabrá qué fue exactamente la causa de la excepción que se produjo

((System.Web.HttpApplication)(sender)).Context.AllErrors 

Este método le ayudará, sin importar dónde se produce la excepción en su Aplicación web.

+0

La pregunta indica que se está utilizando el controlador OnException del controlador, por lo que no responde la pregunta. –

48

Como Charlino implícita, los valores están disponibles a partir del parámetro ExceptionContext:

protected override void OnException(ExceptionContext filterContext) 
{ 
    var controllerName = filterContext.RouteData.Values["controller"]; 
    var actionName = filterContext.RouteData.Values["action"]; 

    // ... 

    base.OnException(filterContext); 
} 
Cuestiones relacionadas