是否在黄色死亡屏幕的某处实施?

时间:2011-09-05 05:12:28

标签: .net asp.net

在ASP.NET中,当你处于DEBUG模式并且出现故障时,你会得到一个着名的黄色死亡屏幕。

它显示有Server Error in <Location> Application,提供描述,异常详细信息,源文件和堆栈跟踪。

我想扩展此错误页面以包含一些额外信息。

  • 是否存在黄色死亡屏幕的“开源”实现?
  • 有没有办法扩展死亡的内置黄色屏幕?

4 个答案:

答案 0 :(得分:10)

错误页面格式化由System.Web.ErrorFormatter及其子类完成,遗憾的是它们是内部的。如果您愿意使用HttpException.GetHtmlErrorMessage(),可以抓取HTML并进行修改。但我倾向于像其他评论者所建议的那样做并使用Server.GetLastError并自己格式化。

如果是这样 - 请确保HtmlEncode输出错误消息以缓解XSS并确保您的生产站点不显示有关错误的任何信息(因为这是ASP.NET padding oracle解密的攻击媒介2010年的攻击。)

答案 1 :(得分:4)

此页面似乎包含您要查找的信息。

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

本质上,当异常冒泡到运行时它会被System.Web.HttpException包裹起来(这是错误的。至少我没有在MVC 3中看到这种行为)。

我认为您可以扩展该类并覆盖GetHtmlErrorMessage以返回您想要的任何额外数据。

更新:嗯,通过一些实验,我觉得我错了。但是有一个解决方法......

您可以以您选择的任何方式编写异常中的信息,然后清除错误,您将拥有要返回的内容。

像这样......

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();
}

答案 2 :(得分:1)

如果您使用自定义错误页面,我相信您可以使用HttpContext.Current.Server.GetLastError();收到最后一个错误我不确定是否有任何自定义页面。但是,YSOD的内容应该可以从请求的上下文中获得。

答案 3 :(得分:0)

是的。

见这里:
http://www.oschina.net/code/explore/mono-2.8.1/mcs/class/System.Web/System.Web/HttpException.cs

它来自mono(.NET for Linux)的源代码,版本&lt; 2.10(即2.8)。 在2.10+版本中,他们开始使用模板,这使得查找和理解模板变得更加困难。