2010-05-05 11 views

risposta

-2

Controllare lo stack di chiamate dell'eccezione.

Ad esempio:

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

Non farlo; ExceptionContext fornisce un modo molto più semplice, pulito ed efficiente per accedere al nome e all'azione del controller come da risposta di OdeToCode qui sotto. –

+0

@ChristopherKing: purché sia ​​disponibile tale contesto. – SLaks

+4

Quale credo che faccia, secondo la dichiarazione che sta gestendo gli errori nel metodo OnException. –

-4

aggiungere il seguente metodo nella vostra global.asax e mettere un punto di interruzione su di esso

public void Application_Error(object sender, EventArgs e) 
    { 


    } 

Non importa dove nell'applicazione si verifica un errore, il punto di rottura su questo metodo sarà colpito. Da qui si può vedere il valore per la seguente espressione nella finestra di controllo rapido e si sa che cosa esattamente è stata la causa dell'eccezione che si è verificato

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

Questo metodo aiuterà, non importa dove si verifica l'eccezione nella vostra applicazione web.

+0

La domanda indica che viene utilizzato il gestore OnException del controller in modo che questo non risponda alla domanda. –

48

Come Charlino implicita, i valori sono disponibili dal parametro ExceptionContext:

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

    // ... 

    base.OnException(filterContext); 
} 
Problemi correlati