Какие события жизненного цикла 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.
Ответ 5
void Application_Error(Object sender, EventArgs e)
in global.asax
http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx
http://msdn.microsoft.com/en-us/library/fwzzh56s%28v=vs.100%29.aspx