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