هل يمكن إنشاء شاشة الموت الصفراء (YSOD) لـ ASP.NET عند الطلب أو التقاطها؟

StackOverflow https://stackoverflow.com/questions/878628

سؤال

نود فقط التقاط مخرجات YSOD لاستخدامها في البريد الإلكتروني للإبلاغ عن الأخطاء، من معالج الأخطاء Global.asax، على سبيل المثال.هل هناك أي طريقة للاستفادة من مولد ysod المدمج؟

هل كانت مفيدة؟

المحلول

ونعم هناك طريقة التي يمكنك القيام بذلك.

في الحدث Application_Error في ملف Global.asax، احصل على استثناء الماضي باعتبارها System.HttpUnhandledException. سوف التعليمات البرمجية بهذا الشكل:

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

وأنا أتفق مع تعليقات الآخرين. يمكنك أيضا القيام بذلك مع ELMAH.

نصائح أخرى

أود أن أنظر في ELMAH (وحدات تسجيل الأخطاء ومعالجاتها لـ ASP.NET):

Elmah (وحدات تسجيل الأخطاء والمعالجات) هي منشأة تسجيل خطأ على مستوى التطبيق قابلة للتوصيل تمامًا.يمكن إضافتها ديناميكيًا إلى تطبيق الويب ASP.NET قيد التشغيل ، أو حتى جميع تطبيقات الويب ASP.NET على جهاز ، دون أي حاجة لإعادة التثبيت أو إعادة النشر.

بمجرد إسقاط Elmah في تطبيق ويب قيد التشغيل وتكوينه بشكل مناسب ، يمكنك الحصول على المرافق التالية دون تغيير سطر واحد من الكود الخاص بك:

  • تسجيل جميع الاستثناءات التي لم تتم معالجتها تقريبًا.
  • صفحة ويب لعرض السجل الكامل للاستثناءات المعاد ترميزها عن بعد.
  • صفحة ويب لعرض التفاصيل الكاملة لأي استثناء تم تسجيله عن بُعد.
  • في كثير من الحالات ، يمكنك مراجعة الشاشة الصفراء الأصلية الأصلية التي تم إنشاؤها ASP.NET لاستثناء معين ، حتى مع إيقاف تشغيل وضع CustomErrors.
  • إشعار عبر البريد الإلكتروني بكل خطأ وقت حدوثه.
  • موجز RSS لآخر 15 خطأ من السجل.

هل سمعت ELMAH؟ قد توفر لك كل الميزات التي تريدها حقا ...

وهنا هو بلوق وظيفة هذا ما يفسر قليلا عن ذلك: HTTP: //www.hanselman كوم / بلوق / ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

ويجب عليك التحقق من ELMAH يفعل ما تسألون تلقائيا.

وأود أن أقول بشكل عام، كنت لا تريد للمستخدم تجربة 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");
}

ويتم تشغيل الحدث Application_Error في الملف Global.asax عند حدوث استثناء غير معالج في التطبيق. يمكنك الاستيلاء على استثناء الماضي التي وقعت باستخدام أسلوب Server.GetLastError ().

وبالمثل، يمكنك إنشاء الخاصة صفحة خطأ مخصصة الخاص بك عن طريق تحديد ذلك في الملف web.config تحت قسم customErrors في ملف web.config. عن طريق تحديد الملف الافتراضي، يمكنك القيام بأي عرف الترميز عندما يتم توجيه استثناء هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top