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

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

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

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

5 ответов

Лучший способ - перехватить последнюю ошибку сервера и исключения из домена приложения.

Все это можно сделать в файле 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);
    }

Удачного кодирования:)

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

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

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

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

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

Другие вопросы по тегам