0

如果我的 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,此时错误是否基本上丢失并且我无法访问异常信息?

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

4

6 回答 6

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

于 2012-08-30T15:45:59.967 回答
1

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

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

于 2012-08-30T15:52:18.303 回答
0

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

于 2012-08-30T15:44:32.010 回答
0

在您的 global.asax 中,您可以捕获错误并将其保存以在错误页面中检索。

您重写Application_Error以捕获错误。

于 2012-08-30T15:46:38.060 回答
0

异常不会丢失。您可以调用Server.GetLastError()以获取最后抛出的异常。

由于它返回一个Exception对象,您可以简单地调用StackTrace来获取完整的堆栈跟踪。

于 2012-08-30T15:49:51.210 回答
-1

使用 GetLastError,它允许您(奇怪的是)获取发生的最后一个错误。

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

于 2012-08-30T15:49:54.737 回答