Как найти, в каком контроллере/действии произошла ошибка?

Я регистрирую все ошибки, возникающие в моем методе OnException.

Как найти, в каком контроллере/действии произошла ошибка?

Ответы

Ответ 1

Проверьте стек вызовов исключений.

Например:

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

Ответ 2

Как подразумевается Charlino, значения доступны из параметра ExceptionContext:

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

    // ...

    base.OnException(filterContext);
}

Ответ 3

Добавьте следующий метод в свой global.asax и поставьте на него точку останова

public void Application_Error(object sender, EventArgs e)
    {


    }

Независимо от того, где в приложении возникает ошибка, точка останова на этом методе будет удалена. Отсюда вы можете увидеть значение для следующего выражения в окне быстрого просмотра, и вы узнаете, что именно стало причиной произошедшего исключения.

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

Этот метод поможет, независимо от того, где исключение возникает в вашем веб-приложении.