Какие события жизненного цикла ASP.NET запускаются после HttpApplication.Error?

Я хочу знать, какие части жизненного цикла запроса ASP.NET происходят после того, как ошибка обрабатывается через событие HttpApplication.Error. В частности, какое из событий, перечисленных в http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages, загорается после ошибки? Я знаю, что EndRequest все еще срабатывает, и я подозреваю, что PreSendRequestHeaders и PreSendRequestContent также срабатывают, но в остальном я понятия не имею.

Это зависит от того, когда в жизненном цикле возникает ошибка? Это зависит от того, вызываю ли я Server.ClearError() в обработчике ошибок?

Я задаю этот вопрос, потому что не знаю, следует ли мне вызывать HttpApplication.CompleteRequest() из моего обработчика ошибок.

Ответы

Ответ 1

Лучший способ - уловить последнюю ошибку сервера и исключений appdomain.

Все они могут быть выполнены в файле Global.asax.cs.

Проверьте следующие шаги:

1- В Global.asax.cs, поймайте последнюю ошибку и запишите ее.

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Server.ClearError();
        log.Error("Application Error caught in Global ", exception);
    }

2- Добавьте обработчик событий для события UnhandledException в AppDomain, его следует добавить в Application_Start:

    protected void Application_Start(object sender, EventArgs e)
    {
        //....
        AppDomain.CurrentDomain.UnhandledException 
              += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    }       

3- И вот реализация CurrentDomain_UnhandledException:

    void CurrentDomain_UnhandledException(object sender, 
                                                   UnhandledExceptionEventArgs e)
    {
      if (e != null)
        log.Error("Domain Unhandled Exception: ", e.ExceptionObject as Exception);
    }

Счастливое кодирование:)

Ответ 2

Событие LogRequest возникает, даже если возникает ошибка. Вы можете предоставить обработчик событий для события LogRequest для предоставления пользовательского ведения журнала для запроса. для более подробной информации о http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

Если ваше приложение генерирует собственный вывод ошибок, подавляйте сообщение об ошибке по умолчанию, которое генерируется ASP.NET вызовом метода ClearError в событии HttpApplication.Error.

Ответ 3

Я не проверял, но я думаю, что это зависит.

Ошибка в любом событии страницы (Init/Load/PreRender). После повышения ошибки, если вы очистите ошибку, жизненный цикл страницы продолжается с того места, где он был.

Ответ 4

Исключение, вызывающее событие Error, может быть вызвано вызовом метода GetLastError. Если ваше приложение генерирует пользовательский вывод ошибки, подавите сообщение об ошибке по умолчанию, сгенерированное ASP.NET, вызовом метода ClearError.