2009-11-15 125 views
1

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

例如:

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

能不能做到?这是正确的语法?

回答

6

而不是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

是,将工作(添加,当然一些分号,你可能只是想发送的异常消息):

String URL = "Page2.aspx?Exception=" + ex.Message; 
Response.Redirect(URL); 
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

0

正如安德鲁所说,它应该工作。

但是,如果您正在寻找错误管理,那么最好使用Server.GetLastError(),以便获得完整的包含堆栈跟踪的Exception对象。

这里是一般的MSDN article that deals with Application Errors和使用Server.GetLastError()

0

我们总是建议对重定向到一个.aspx页上的错误条件。

过去我们已经看到了一些场景,其中应用程序的一个基本问题导致了错误的发生,然后又重定向到一个error.aspx页面,该页面自身出现了错误,导致无尽的重定向循环。

我们强烈建议人们使用.htm页面或某些不由ASP.NET框架处理的错误页面。

在ASP.NET中使用Web.config的customErrors部分内置了支持,可以为您自动处理错误重定向。

customError tag

你可以看看全球的异常处理过,这可以通过该Application_OnError事件,你可以在Global.asax内找到

由于管理,

菲尔

http://exceptioneer.com