2011-09-05 37 views
14

Trong ASP.NET khi bạn đang ở chế độ DEBUG và một cái gì đó không thành công bạn sẽ có được một màn hình màu vàng nổi tiếng của cái chết.Có thực hiện ở đâu đó của màn hình màu vàng của cái chết không?

Nó cho thấy rằng có một Server Error in <Location> Application, cung cấp mô tả, chi tiết ngoại lệ, tệp nguồn và theo dõi ngăn xếp.

Tôi muốn mở rộng trang lỗi này để bao gồm một số thông tin bổ sung.

  • Có triển khai "nguồn mở" của màn hình màu vàng chết không?
  • Có cách nào để mở rộng màn hình màu vàng chết chóc?

Trả lời

10

Định dạng trang lỗi được thực hiện bằng System.Web.ErrorFormatter và lớp con của nó, mà tiếc là nội bộ. Bạn có thể lấy HTML và sửa đổi nó nếu bạn thích sử dụng HttpException.GetHtmlErrorMessage(). Nhưng tôi muốn có khuynh hướng làm như những người bình luận khác đã đề xuất và sử dụng Server.GetLastError và tự định dạng nó.

Nếu vậy - hãy đảm bảo bạn xuất ra thông báo lỗi để giảm thiểu XSS và đảm bảo trang web sản xuất của bạn không hiển thị bất kỳ thông tin nào về lỗi (vì đây là vector tấn công cho cuộc tấn công giải mã ASP.NET padding oracle trong năm 2010).

+0

những rắc rối với các giải pháp đề xuất với HttpException là dường như không có cách nào để giật HttpException, bạn chỉ có thể chặn SqlException. .. –

+0

Chỉ đơn giản là 'new'-ing lên một' HttpException' truyền 'SqlException' của bạn như là một' InnerException' và sau đó gọi 'GetHtmlErrorMessage()'. –

+0

đã cố gắng ... không nhận được bộ định dạng ... chỉ các tùy chọn có vẻ là DIY hoặc mô-đun http –

1

Nếu bạn đang sử dụng các trang lỗi tùy chỉnh, tôi tin rằng bạn có thể gặp lỗi cuối cùng với HttpContext.Current.Server.GetLastError(); Tôi không chắc liệu có bất kỳ trang tùy chỉnh nào không. Nhưng nội dung của YSOD nên có sẵn từ ngữ cảnh của yêu cầu.

4

Trang này dường như có thông tin bạn đang tìm kiếm.

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

Về cơ bản, khi một ngoại lệ bong bóng lên đến đến runtime nó được bọc trong một System.Web.HttpException (Điều này đã sai. Ít nhất tôi không nhìn thấy hành vi này trong MVC 3).

Tôi nghĩ bạn có thể mở rộng lớp đó và ghi đè GetHtmlErrorMessage để trả lại bất kỳ dữ liệu bổ sung nào bạn muốn.

Cập nhật: Vâng, với một thử nghiệm nhỏ, có vẻ như tôi đã sai. NHƯNG có một giải pháp khác ...

Bạn có thể ghi thông tin từ ngoại lệ theo bất kỳ cách nào bạn chọn, sau đó xóa lỗi và bạn sẽ có những gì bạn muốn trả lại.

Something như thế này ...

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

Về lý thuyết, công trình này, tuy nhiên trong mvc3 khi nó chạm Application_Error bạn có một SqlException ... không phải là một HttpException –

+0

lại chỉnh sửa của bạn, yeah ... Tôi đã nhận rằng đến nay ...của nó chỉ là tôi không có và HttpException vì vậy không thể làm cho html cho màn hình màu vàng, trừ khi tôi tay mã nó –

+0

Xem nguồn và trích xuất sẽ giúp bạn tiết kiệm những rắc rối. Sau đó, thiết lập một mẫu dao cạo đẹp mắt sẽ hiển thị ngoại lệ và bất kỳ dữ liệu bổ sung nào bạn muốn từ nó? –

Các vấn đề liên quan