2012-08-30 26 views
0

如果我的web.config有: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,在这一点上基本上是错误的,我不能访问异常信息?

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

回答

1

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

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

0

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

1

通过此SO帖子(http://stackoverflow.com/questions/343014/asp-net-custom-error-page-server-getlasterror-is-null),如果您正在运行.net 3.5 SP1,您可以使用customErrors元素上的redirectMode属性。 http://msdn.microsoft.com/en-us/library/system.web.configuration.customerrorssection.redirectmode(v=vs.90).aspx

一旦你这样做,你就必须从Server.GetLastError(访问错误):在redirectMode

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

编辑:你会使用ResponseRewrite模式redirectMode

+0

因此,我不能得到server.lasterror然后正确? – loyalflow

+0

是的,我读到的方式是默认的customError模式做了重定向,这会丢失错误信息。 – Gromer

0

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

您覆盖Application_Error以发现错误。

0

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

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

+0

,但它重定向到我的自定义错误页面,它的一个新的请求。 – loyalflow

相关问题