Подтвердить что ты не робот

Ловушка ошибок в Global.asax

У меня есть следующее в моем Global.aspx, предназначенном для обработки ошибок:

void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    if (exception != null)
    {
        //Log
        if (HttpContext.Current.Server != null)
        {
           HttpContext.Current.Server.Transfer("/siteerror.aspx");
        }
    }
}

Это работает по большей части, но иногда не попадает в Server.Transfer. По какой-то причине HttpContext.Current.Server имеет значение null. Я выяснил, где это происходит: когда ошибки происходят в пользовательском элементе управления и в моих классах бизнес-логики. Я что-то пропустил?

Спасибо

4b9b3361

Ответ 1

Блок Application_Error может перехватывать исключение в любое время между жизненным циклом приложения.

Жизненный цикл приложения - это родительский цикл жизненного цикла сеанса, поскольку вы можете понять, что в одном приложении может быть много сеансов.

Таким образом, вы можете иметь HttpContext.Current null при определенных ошибках, возникших перед созданием сеанса или после истечения сеансов.

Если вы хотите написать переадресацию ошибок, специфичных для сеанса, вы должны всегда проверять нуль текущего HttpContext.

Вы также можете использовать Server.GetLastError, чтобы узнать, какие данные об ошибках возникли, и написать перенаправление страницы ошибки через тег CustomError в web.config

См. следующую ссылку

http://weblogs.asp.net/scottgu/archive/2006/08/12/Tip_2F00_Trick_3A00_-Show-Detailed-Error-Messages-to-Developers.aspx

Ответ 2

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

Например, если фоновый поток обрабатывает и вызывает исключение.