Sto utilizzando un filtro azione globale per gestire e registrare tutte le eccezioni.ExceptionContext.ExceptionHandled passa a true. Dove viene gestita l'eccezione?
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
Questo è come il filtro di azione globale ElmahHandleErrorAttribute
è definito - è l'override del metodo OnException
.
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
//Is the exception handled already? context.ExceptionHandled seems to be true here
if (!context.IsChildAction && (context.HttpContext.IsCustomErrorEnabled))
{
//Do other stuff stuff
//Log to Elmah
}
}
...
}
Non capisco il motivo per cui il valore di context.ExceptionHandled
è vero quando il metodo OnException
esegue. Come viene gestita questa eccezione?
operativa -Editazione- Ho una sezione customErrors
nel Web.Config
. Ho una classe ErrorController
e azioni chiamate General
e Http404
.
<customErrors mode ="On" defaultRedirect="Error/General">
<error statusCode="404" redirect="Error/Http404"/>
</customErrors>
Quello che non capisco è, l'azione di controllo General
non viene eseguita (punto di interruzione non è mai colpito), ma il valore di ExceptionContext.ExceptionHandled
è impostata su true quando il metodo di ElmahHandleErrorAttribute
inizia OnException
esecuzione.
Non riesco a vedere 'context.ExceptionHandled' nel codice, dove si trova? – gdoron
@gdoron Ho rimosso il controllo per context.ExceptionHandled.È stato precedentemente incluso nell'istruzione: 'if (! Context.IsChildAction &&! Context.ExceptionHandled && (context.HttpContext.IsCustomErrorEnabled))' – escist
Hai sovrascritto il metodo 'OnException' del controller? – gdoron