我希望在发生异常时使用Response.Redirect重定向浏览器 我还想将异常消息传递给我的错误页面。
例如:
string URL = "Page2.aspx?Exception=" + ex.ToString()
Response.Redirect(URL)
可以吗?这是正确的语法吗?
答案 0 :(得分:7)
而不是Response.Redirect
,它向客户端发送响应,要求其请求不同的页面,您应该调用Server.Transfer
,它立即运行不同的页面并将该页面直接发送到客户端。
然后,您可以将异常放在HttpContext.Items
中,并在错误页面中从HttpContext.Items
读取。
例如:
catch (Exception ex) {
HttpContext.Current.Items.Add("Exception", ex);
Server.Transfer("Error.aspx");
}
在Error.aspx
中,您可以获得如下的异常:
<%
Exception error;
if (!HttpContext.Current.Items.Contains("Exception"))
Response.Redirect("/"); //There was no error; the user typed Error.aspx into the browser
error = (Exception)HttpContext.Current.Items["Exception"];
%>
答案 1 :(得分:1)
是的,这样可行(当然添加了一些分号,你可能只想发送异常消息):
String URL = "Page2.aspx?Exception=" + ex.Message;
Response.Redirect(URL);
答案 2 :(得分:0)
通常我会在页面中设置面板并在catch块中切换可见性以向用户显示友好消息。我还会向自己提供一封电子邮件报告,详细说明错误信息。
try
{
}
catch (Exception ex)
{
formPanel.Visible = false;
errorPanel.Visible = true;
// Log error
LogError(ex);
}
至于将错误报告/转发到另一页:
string errorURL = "ErrorPage.aspx?message=" + ex.Message;
Response.Redirect(errorURL, true);
不要忘记ELMAH! http://bit.ly/HsnFh
答案 3 :(得分:0)
正如安德鲁所说,它应该有效。
但是,如果您正在寻找错误管理,最好使用Server.GetLastError()
,这样您就可以获得完整的Exception
对象,包括堆栈跟踪。
这里一般是MSDN article that deals with Application Errors,使用Server.GetLastError()
。
答案 4 :(得分:0)
我们总是建议不要在错误情况下重定向到.aspx页面。
在过去,我们已经看到了应用程序的一个基本问题导致错误发生的情况,而错误又被重定向到error.aspx页面,它本身已经错误导致无限重定向循环。< / p>
我们强烈建议人们使用.htm页面或ASP.NET框架未处理的错误页面。
使用Web.config的customErrors
部分在ASP.NET中内置支持,以自动为您处理错误重定向。
您也可以查看全局异常处理,这可以通过您在global.asax中找到的Application_OnError
事件进行管理
谢谢,
菲尔