Jak znaleźć kontroler/akcję, w której wystąpił błąd?


Rejestruję wszystkie błędy zgłoszone w mojej metodzie OnException.
Jak znaleźć kontroler/akcję, w której wystąpił błąd?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jak zasugerował Charlino, wartości są dostępne z parametru ExceptionContext:
protected override void OnException(ExceptionContext filterContext)
{
var controllerName = filterContext.RouteData.Values["controller"];
var actionName = filterContext.RouteData.Values["action"];// ... base.OnException(filterContext);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sprawdź stos wywołań wyjątku.
Na przykład:
var actionMethod = new StackTrace(exception)
.GetFrames().FirstOrDefault(f =>
typeof(IController).IsAssignableFrom(f.GetMethod().DeclaringType)
).GetMethod();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dodaj następującą metodę do pliku global.asax i umieść na nim punkt przerwania
public void Application_Error(object sender, EventArgs e)
{
}

Bez względu na to, gdzie w aplikacji wystąpi błąd, punkt przerwania tej metody zostanie trafiony. W tym miejscu możesz zobaczyć wartość następnego wyrażenia w szybkim podglądzie i dowiedzieć się, co dokładnie spowodowało zgłoszony wyjątek
((System.Web.HttpApplication)(sender)).Context.AllErrors

Ta metoda pomoże bez względu na miejsce wystąpienia wyjątku w aplikacji internetowej.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się