2011-09-05 17 views
14

ASP.NET'te, DEBUG kipindeyken ve bir şey başarısız olduğunda, ünlü sarı bir ölüm ekranı elde edersiniz.Ölüm sarı ekranının bir yerinde bir uygulama var mı?

Bir Server Error in <Location> Application olduğunu gösterir, bir açıklama, özel durum ayrıntıları, kaynak dosya ve yığın izleme sağlar.

Bazı ek bilgileri içermek için bu hata sayfasını genişletmek istiyorum.

  • Ölüm sarı ekranının "açık kaynak" uygulaması var mı?
  • Yerleşik sarı ölüm ekranını genişletmenin bir yolu var mı?

cevap

10

hata sayfası biçimlendirme System.Web.ErrorFormatter ve ne yazık ki iç olan alt sınıfları Kullanıcının, yapılır. HTML'yi yakalayabilir ve HttpException.GetHtmlErrorMessage()'u kullanarak değiştirebilirsiniz. Ama diğer yorumcular Server.GetLastError'u önerdi ve kullandım ve bunu kendim biçimlendiririm.

Eğer öyleyse - Sana HtmlEncode XSS hafifletmek ve (bu ASP.NET padding oracle şifre çözme saldırının saldırı vektörü, 2010 yılında olduğu gibi) üretim siteleri hata hakkında herhangi bir bilgi göstermez sağlamak için hata mesajı çıktı emin olun.

+0

HttpException ile önerilen çözümle ilgili sorun, HttpException'ı iptal etmenin bir yolu olmadığı görünüyor, SqlException'ı yalnızca engelleyebilirsiniz. .. –

+0

Sadece bir 'HttpException' 'ın' SqlException'nı bir 'InnerException' olarak geçirip' GetHtmlErrorMessage() 'yi çağırmakla ilgilidir. –

+0

denedim ... biçimlendirici ayarlanmadı ... sadece seçenekler DIY veya bir http modülü gibi görünüyor. –

1

Özel hata sayfaları kullanıyorsanız, en son hatayı HttpContext.Current.Server.GetLastError(); ile alabileceğinizi düşünüyorum. Herhangi bir özel sayfa olup olmadığından emin değilim. Ancak YSOD'un içeriği, talep bağlamında mevcut olmalıdır.

4

Bu sayfa sizin için uygun bilgilere sahip görünüyor. Bir istisna çalışma zamanına kadar kabarcıklar olduğunda

http://www.asp.net/hosting/tutorials/processing-unhandled-exceptions-cs

Esasen, bir System.Web.HttpException sarılmış olur (Bu yanlıştı. En azından ben MVC 3'te bu davranışı görmedik).

Bu sınıfı genişletebildiğinizi ve GetHtmlErrorMessage'i istediğiniz herhangi bir fazla veriyi geri döndürecek şekilde geçersiz kılabileceğinizi düşünürdüm.

Güncelleme: Eh, biraz deneme ile yanlış olabilirmiş gibi görünüyor. ANCAK BILGILER ...

İstediğiniz şekilde bilgiyi istisnadan yazabilir, ardından hatayı temizleyebilir ve geri dönmek istediğiniz şeye sahip olursunuz.

Böyle bir şey ...

protected void Application_Error(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    var error = context.Server.GetLastError(); 
    context.Response.Write(error.Message); 
    context.Response.Write("<br /><br />"); 
    context.Response.Write(error.StackTrace); 
    context.Response.Write("<br /><br />"); 
    context.Response.Write("Hello World"); 
    context.Server.ClearError(); 
} 
+0

Teoride bu, mvc3 uygulamasında, Application_Error'a ulaştığı zaman, bir SqlException var ... bir HttpException yok –

+0

düzenlemenizi yeniden yapın, evet ...Ben sadece sahip değilim ve HttpException bu yüzden ben el kodu kodlama sürece sarı ekran için html oluşturamazsınız –

+0

Kaynağı Görüntüle ve ayıklama size sorun kaydeder. Ardından, istisnai ve istediğiniz fazla veriyi oluşturacak güzel bir tıraş makinesi şablonu oluşturun. –

İlgili konular