Может ли желтый экран смерти ASP.NET (YSOD) генерироваться по требованию или захватываться? - PullRequest
6 голосов
/ 18 мая 2009

Мы бы хотели просто захватить вывод YSOD для использования в электронном сообщении об ошибке, например, из обработчика ошибок Global.asax. Есть ли способ использовать встроенный генератор ysod?

Ответы [ 6 ]

9 голосов
/ 18 мая 2009

Я бы посмотрел на ELMAH (модули регистрации ошибок и обработчики для ASP.NET) :

ELMAH (Модули регистрации ошибок и Обработчики) - ошибка приложения лесозаготовительный объект, который полностью подключаемый. Это может быть добавлено динамически к работающему веб-приложению ASP.NET, или даже все веб-приложения ASP.NET на машине, без необходимости повторная компиляция или повторное развертывание.

Как только ELMAH был брошен в работает веб-приложение и настроен соответственно, вы получаете следующее объекты без изменения одного строка вашего кода:

  • Регистрация почти всех необработанных исключений.
  • Веб-страница для удаленного просмотра всего журнала перекодированных исключений.
  • Веб-страница для удаленного просмотра полной информации о любом из зарегистрированных исключение.
  • Во многих случаях вы можете просмотреть исходный желтый экран смерти что ASP.NET генерируется для данного исключение, даже в режиме customErrors выключен.
  • Уведомление по электронной почте о каждой ошибке в момент ее возникновения.
  • RSS-лента последних 15 ошибок из журнала.
8 голосов
/ 20 октября 2011

Да, есть способ, которым вы можете сделать это.

В событии Application_Error в файле global.asax получите последнее исключение как System.HttpUnhandledException Ваш код будет выглядеть так:

var lastException = Server.GetLastError() as HttpUnhandledException;
string Ysod = lastException.GetHtmlErrorMessage();
// your call to emailing routine follows

Я согласен с комментариями других людей. Вы также можете сделать это с ELMAH.

3 голосов
/ 18 мая 2009

Вы слышали об ELMAH? Это может дать вам все функции, которые вы действительно хотите ...

Вот сообщение в блоге, которое немного объясняет это: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

2 голосов
/ 18 мая 2009

Я бы сказал, в общем, вы не хотите, чтобы пользователь испытывал YSOD. Это то, что я вставил в веб-приложения, чтобы зафиксировать ошибку и затем предоставить пользователю более изящную страницу с ошибкой ...

protected void Application_Error(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();
    HttpContext ctx = HttpContext.Current;

    msg.To.Add(new MailAddress("me@me.com"));
    msg.From = new MailAddress("from@me.com");
    msg.Subject = "My app had an issue...";
    msg.Priority = MailPriority.High;

    StringBuilder sb = new StringBuilder();
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
    msg.Body = sb.ToString();

    //CONFIGURE SMTP OBJECT
    SmtpClient smtp = new SmtpClient("myhost");

    //SEND EMAIL
    smtp.Send(msg);

    //REDIRECT USER TO ERROR PAGE
    Server.Transfer("~/ErrorPage.aspx");
}
2 голосов
/ 18 мая 2009

Вы должны проверить ELMAH он делает то, что вы спрашиваете автоматически.

1 голос
/ 18 мая 2009

Событие Application_Error в файле Global.asax запускается всякий раз, когда в приложении возникает необработанное исключение. Вы можете получить последнее исключение, которое произошло с помощью метода Server.GetLastError ().

Аналогичным образом, вы можете создать свою собственную страницу ошибок, указав ее в web.config в разделе customErrors в файле web.config. Указав файл по умолчанию, вы можете выполнять любое пользовательское кодирование, когда туда направляется исключение.

...