Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 死亡黄屏的某个地方有实现吗?_.net_Asp.net - Fatal编程技术网

.net 死亡黄屏的某个地方有实现吗?

.net 死亡黄屏的某个地方有实现吗?,.net,asp.net,.net,Asp.net,在ASP.NET中,当您处于调试模式且出现故障时,您会看到著名的死亡黄屏 它显示应用程序中存在服务器错误,提供了描述、异常详细信息、源文件和堆栈跟踪 我想扩展这个错误页面以包含一些额外的信息 死亡黄屏有“开源”实现吗 有没有办法延长内置的死亡黄屏 如果您使用的是自定义错误页面,我相信您可以使用HttpContext.Current.Server.GetLastError()获取最后一个错误我不确定是否有任何自定义页面。但是YSOD的内容应该可以从请求的上下文中获得。此页面似乎包含您要查找的信息

在ASP.NET中,当您处于
调试
模式且出现故障时,您会看到著名的死亡黄屏

它显示应用程序中存在
服务器错误
,提供了描述、异常详细信息、源文件和堆栈跟踪

我想扩展这个错误页面以包含一些额外的信息

  • 死亡黄屏有“开源”实现吗
  • 有没有办法延长内置的死亡黄屏

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

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

本质上,当一个异常冒泡到运行时,它会被包装在一个
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();
}
受保护的无效应用程序\u错误(对象发送方,事件参数e)
{
var context=HttpContext.Current;
var error=context.Server.GetLastError();
context.Response.Write(错误消息);
context.Response.Write(“

”); context.Response.Write(error.StackTrace); context.Response.Write(“

”); context.Response.Write(“helloworld”); context.Server.ClearError(); }
错误页面格式化是由
System.Web.ErrorFormatter
及其子类完成的,不幸的是,它们是内部的。如果愿意,可以使用
HttpException.GetHtmlErrorMessage()
,获取HTML并对其进行修改。但我倾向于按照其他评论者的建议,使用
Server.GetLastError
并自己格式化它

<如果>如此,请确保您的代码< HtmlEncode > /COD>错误消息输出以减轻XSS并确保您的生产站点不显示任何有关错误的信息(因为这是2010中的解密攻击的攻击向量)。

是的,有。

请参见此处:

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

理论上,这是可行的,但是在mvc3中,当它遇到应用程序错误时,您会出现SqlException。。。没有Http例外你的编辑,是的。。。我走了那么远。。。它只是我没有和HttpException,所以不能呈现黄色屏幕的html,除非我手工编写itView源代码和提取代码,这将为您省去麻烦。然后设置一个很好的razor模板,它将呈现异常以及您想要从中获取的任何额外数据?是的。。。我想。。。这是一个皮塔。。。我想有个更容易的办法way@Sam:是的,微软似乎认为在框架中的很多地方扩展性更好…HttpException的建议解决方案的问题在于似乎没有办法删除HttpException,您只能截获SqlException…只需创建一个
HttpException
并将您的
SqlException
作为
InnerException
传递,然后调用
GetHtmlErrorMessage()
,怎么样。。。未设置格式化程序。。。如果您使用
HttpUnhandledException(字符串消息,异常内部异常)
新建子类
HttpUnhandledException
,则唯一的选项似乎是DIY或http模块look(根据Reflector),它调用
SetFormatter
…true。。。看见我接受这个