2009-11-15 129 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