将异常传递到ASP.net/C#中的错误屏幕
我来自桌面背景,因此不确定如何将捕获的异常传递到"错误"页面,以避免用户看到标准异常屏幕。
我的一般问题是如何将异常从页面X传递到ASP.net中的"错误"页面?
解决方案
我认为我们可以使用global.asax -Application_Exception处理程序来捕获异常,然后将其存储以在错误页面中显示。
但是实际上,错误页面不应包含可能仅导致另一个错误的代码。它应该是简单的"糟糕!出了点问题"页面。
如果我们想获取有关错误的详细信息,请使用Windows的事件查看器或者ELMAH或者采用某些日志记录机制。
我建议在web.config中使用customErrors部分:
<customErrors mode="RemoteOnly" defaultRedirect="/error.html"> <error statusCode="403" redirect="/accessdenied.html" /> <error statusCode="404" redirect="/pagenotfound.html" /> </customErrors>
然后使用ELMAH通过电子邮件发送和/或者记录错误。
使用asp.net中的自定义错误页面,我们可以在web.config的customError部分中找到它
我使用的模式是将错误记录在try / catch块中(使用log4net),然后执行response.redirect到一个简单的错误页面。假设我们不需要显示任何错误详细信息。
如果需要在单独的页面上获取异常详细信息,则可能需要查看Server.GetLastError。我在global.asax(在Application_Error事件中)中使用它来记录未处理的异常并重定向到错误页面。
我们很幸运在Global.asax Application_Error事件中捕获异常,将其存储在会话中,并重定向到我们的错误页面。或者,我们可以对错误消息进行编码,然后将其传递到querystring中的错误页面。
我们还可以从获得异常
Server.GetLastError();
我们将异常捕获到Global.asax文件中,并将其存储在Session中,然后将用户重定向到错误页面,在其中为Session变量捕获异常并向用户显示Message信息。
protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); this.Session[CacheProvider.ToCacheKey(CacheKeys.LastError)] = ex; }
在显示给用户之前,我们确实记录了错误消息。