在ASP.NET中,当你处于DEBUG
模式并且出现故障时,你会得到一个着名的黄色死亡屏幕。
它显示有Server Error in <Location> Application
,提供描述,异常详细信息,源文件和堆栈跟踪。
我想扩展此错误页面以包含一些额外信息。
答案 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+版本中,他们开始使用模板,这使得查找和理解模板变得更加困难。