尽管在web.config文件中添加了以下设置,但生产服务器(Windows Server 2008 R2 64位,带IIS7.5)上的ASP.NET 4.0 Web应用程序未显示详细的错误消息:
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
根据这个MSDN article,我们应该得到详细的错误消息,但是我们得到了下面的自定义错误消息,它显示在错误页面上,当错误发生时,我们在try/catch
的“catch
“块中定向到该错误页面:
应用程序遇到错误,请稍后重试。如果问题仍然存在,请通过以下方式与系统管理员联系:.....”
我们也尝试了this suggestion,但仍然在try/catch
块上出现错误,显示了上述消息。我们甚至重新启动了IIS,以确保应用了web.config更改,但运气不佳。我们已确保web.config文件中没有重复上述设置,并且应用程序中没有其他web.config文件。
编辑此外,我们在machine.config文件中没有<deployment ...>
元素,这意味着根据此MSDN article,<deployment retail="false"
〉是默认值。
3条答案
按热度按时间bfnvny8b1#
您的问题是您捕获了错误,然后重定向到错误页面,因此没有未处理的错误-a这意味着没有错误冒泡导致“黄屏死机”(这是您在
mode="Off"
时将看到的)。当然,您不希望在生产中使用
mode="Off"
,因为它很有启发性。mode="RemoteOnly"
只会在本地使用YSOD,是首选方法。要测试并查看YSOD,请将
throw new Exception();
直接放在Page_Load
之后(在try/catch块之外),然后在本地运行该页。既然你已经捕捉到了异常,你 * 可以 * 有某种错误处理,将错误细节(你正在寻找的)记录到数据库或文件中,这样你就可以检查你的网站发生了什么。虽然我不太同意这种方法,因为这样:
1.您显然正在捕获 * 意外 * 异常,这意味着您没有意识到您的站点的潜在问题,因为它们被隐藏起来了,并且
1.你必须在每一个页面中放置错误处理/重定向。你不需要这样做。
相反,考虑使用Elmah,它是on NuGet,提供了一种记录错误的简单方法(或者您可以从
global.ascx
实现您自己的自定义日志记录)。然后,停止捕获所有异常,只捕获您希望发生的异常,而不关心它们是否发生,也不想记录(就像转换中的
FormatException
)。* 意外 * 异常现在将出现,由Elmah记录,然后您可以使用CustomErrors来重定向/显示错误页面...并且您不需要在实际页面的代码后面执行任何这些操作(这样你就不用把错误处理放在每个页面的每个代码后面)Elmah记录日志,并让你随时查看YSOD。如果你走这条路,这比在global.ascx
中滚动你自己的错误处理要容易得多,只要确保你保护了elmah。cld4siwp2#
对于在IIS中运行.NET(Core)应用程序时遇到此问题的任何人,您可以改为通过设置stdoutLogEnabled=“true”和stdoutLogFile=“C:\Users\SomeUser\LoggingDirectory\LogFileName”将异常的输出发送到日志文件。在这种情况下,您将获得一个名为LogFileName_20220607193533_9648.txt的日志文件。
确保重置IIS。
免责声明:我不确定你是否需要“customErrors mode='Off'”部分,但是,当这个解决方案为我工作时,它就在那里。
utugiqy63#
在将来某个时候,注解掉
web.config
中的以下代码:请将更新为以下代码。