情况如下: -
我有
<customErrors mode="On" defaultRedirect="error.html" />
在我的web.config中。
我还在Application_Error
(在global.asax.cs中)中有自定义错误处理代码,用于检查某些众所周知的异常类型并重定向到每个异常错误页面的自定义错误页面。如果异常不是一个众所周知的类型,那么我只需从Application_Error
返回,而不需要调用Server.ClearError()
,因此默认的自定义处理应该会显示页面error.html。< / p>
但是每当我的应用程序抛出一个未处理的(并且不为人知的)异常时,我最终会出现在默认的Asp.Net错误页面 - 你知道我的意思,死亡的黄色屏幕......
Runtime Error Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed. Details: To enable the details of this specific error message to be viewable on the local server machine, please create a tag within a "web.config" configuration file located in the root directory of the current web application. This tag should then have its "mode" attribute set to "RemoteOnly". To enable the details to be viewable on remote machines, please set "mode" to "Off".
我已经检查了明显的东西(比如仔细检查我没有在Application_Error
中抛出另一个错误而且我并没有意外地'调用ClearError。这对于这个网络应用程序来说肯定是可疑的(我做了一点测试Web应用程序和自定义错误处理按预期工作) - 这应该排除我的machine.config文件中的奇怪。
我会继续摸不着头脑,但在此期间,我想我会在这里提出问题,看看是否有人有任何好主意。
PS。我正在使用Windows 7 Business(IIS 7.5),但在Win server 2003(IIS6)上观察到相同的行为。
答案 0 :(得分:1)
感谢Joe和Click看看,但这个问题完全是我的错!
我从描述中省略的一个重要信息是我的网页在请求完成之前刷新了响应(如果你想知道为什么我这么做,请参阅下面的内容)。
似乎一旦将某些内容发送到客户端,customError处理就不再起作用了。我不能说这是自定义错误处理的失败,因为一旦它开始渲染内容,它可能需要一些黑暗的伏都教来告诉浏览器重定向到它!
说过我希望将redirectMode="ResponseRewrite"
添加到customError节点会有所帮助(可能会在我已经发送到浏览器的内容下面得到错误页面吗?)但是也失败了。没关系。
一个快速的谷歌产生了这个http://forums.iis.net/p/993221/1313916.aspx - 一个关于那里的小伙子有一个解决方法,我会尝试。 http://forums.iis.net/p/993221/1399583.aspx#1399583中建议的技术有效。它远非理想(我们必须阅读网络配置),但它有效。
(*)为什么我在请求完成之前刷新响应?我们的一些页面返回大型报告,可能需要几秒钟才能生成。我们在这些请求开始时向客户端发送“PLease wait + spinny gif”消息并刷新,以便浏览器在等待其余响应时呈现消息+图标。我想我会调查一种不太“hacky”的方法来实现这个目标。