重定向到错误页面

时间:2009-11-15 13:02:59

标签: c# .net asp.net exception response.redirect

我希望在发生异常时使用Response.Redirect重定向浏览器 我还想将异常消息传递给我的错误页面。

例如:

string URL = "Page2.aspx?Exception=" + ex.ToString()
Response.Redirect(URL)

可以吗?这是正确的语法吗?

5 个答案:

答案 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中内置支持,以自动为您处理错误重定向。

customError tag

您也可以查看全局异常处理,这可以通过您在global.asax中找到的Application_OnError事件进行管理

谢谢,

菲尔

http://exceptioneer.com