web.config中的自定义错误页面会丢失错误信息吗?

时间:2012-08-30 15:41:37

标签: c# asp.net error-handling

如果我的web.config有:

<customErrors mode="Off" defaultRedirect="CustomErrorPage.aspx">
      <error statusCode="401" redirect="~/CustomErrorPage.aspx?statusCode=401" />
      <error statusCode="403" redirect="~/CustomErrorPage.aspx?statusCode=403" />
      <error statusCode="404" redirect="~/CustomErrorPage.aspx?statusCode=404" />
      ...
</customErrors>

现在在我的CustomErrorPage.aspx中,如何在没有自定义错误页面并将其输出到浏览器时获取类似于我看到黄色屏幕错误页面的堆栈跟踪信息?

或者,因为这是重定向到customerrorpage.aspx,此时错误是否基本丢失,我无法访问异常信息?

这是一个具有复杂虚拟目录等的遗留应用程序。所以我可以在这一点上轻松删除其中一个错误库。

6 个答案:

答案 0 :(得分:1)

根据此SO帖子(http://stackoverflow.com/questions/343014/asp-net-custom-error-page-server-getlasterror-is-null),如果您运行的是.Net 3.5 SP1,则可以使用redirectMode元素上的customErrors属性。

有关redirectMode的更多信息: http://msdn.microsoft.com/en-us/library/system.web.configuration.customerrorssection.redirectmode(v=vs.90).aspx

执行此操作后,您将可以从Server.GetLastError()访问错误: http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.getlasterror.aspx

修改:您将使用ResponseRewrite

redirectMode模式

答案 1 :(得分:1)

失败了。你甚至不在同一个请求中,因为它是通过重定向完成的。

最后一点本身已经够糟糕了(将某人重定向到错误页面有什么意义?),但这会影响到你。但是,redirectMode="ResponseRewrite"元素添加了customErrors后,就可以解决此问题,也意味着Server.GetLastError()可以正常工作。

答案 2 :(得分:0)

您可以在服务器上的某个文件中记录错误(您需要在Global.asax.cs中添加Application_Error事件处理程序),或者在webconfig中删除此行以获取带有异常的黄色屏幕。

答案 3 :(得分:0)

在你的global.asax中,你可以捕获错误并保存它以便在错误页面中检索。

您覆盖Application_Error以捕获错误。

答案 4 :(得分:0)

异常不会丢失。您可以调用Server.GetLastError()来获取最后一个异常。

由于它返回一个Exception对象,您只需调用StackTrace即可获得完整的堆栈跟踪。

答案 5 :(得分:-1)

使用GetLastError,它允许你(奇怪地)获得最后发生的错误。

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.getlasterror.aspx