2011-04-23 94 views
1

我爲我的ASP.NET 4應用程序製作了自定義錯誤頁面。我將異常對象放在HttpContext.current.Session["CustomError"]中,但是當用戶重定向到錯誤頁面HttpContext.current.Session["CustomError"]時是null。 我這樣做是在CustomError類的構造函數是這樣的:HttpContext.current.Session在錯誤中被清除頁面

public CustomError(enExceptionType ExceptionType) : base(ExceptionMessage(ExceptionType)) { 
    HttpContext.Current.Session["CustomError"] = this; 
} 

當我邁過碼會話[「錯誤」]包含錯誤的對象。 有什麼想法?

UPDATE:

我刪除了從web.config中的自定義錯誤頁,並已將此添加glabal.asax:

void Application_Error(object sender, EventArgs e) 
{ 
    if (Context.IsCustomErrorEnabled) 
    { 
     Response.Redirect("~/Error.aspx"); 
    } 
} 

通過這個功能我注意到,當一個異常被拋出此功能是步進稱爲兩次,第一次Session [「CustiomError」]包含錯誤對象,但第二次爲空。

+0

要實現與自定義錯誤會話,如果你想記錄它做什麼,你可以使用我將不勝感激全局asax中的application_error事件 – Ivo 2011-04-23 08:46:00

+0

我想在錯誤頁面上顯示自定義錯誤對象的錯誤信息。 – nima 2011-04-23 08:47:56

+0

你可以把代碼放在你指定異常的地方嗎? – 2011-04-23 08:55:08

回答

0

這解決了這個問題,但如果有人告訴我,爲什麼:)

void Application_Error(object sender, EventArgs e) 
{ 
    if (Context.IsCustomErrorEnabled) 
    { 
     Response.Redirect("~/Error.aspx"); 
     **Server.ClearError();** 
    } 
} 
0

而不是使用Response.redirect(URL)(我假設你已經在你的代碼)使用

Server.Transfer(URL)

Response.redirect(url, false)

爲什麼Server.Transfer(url)的?

傳輸到使用 Server.Transfer的另一頁節省服務器資源 。而不是告知 瀏覽器重定向,它只是將 更改爲Web服務器上的「焦點」,而 則傳輸請求。這意味着你的 沒有得到很多HTTP請求 ,因此減輕了你的Web服務器和 的壓力,使你的應用程序運行得更快。

來源here

請讓我知道,如果其中一個適合你。

UPDATE

如果您使用的web配置設置可以嘗試添加ResponseWrite價值redirectmode VAR?

<customErrors mode="RemoteOnly" defaultRedirect="~/errors/GeneralError.aspx" redirectMode="ResponseRewrite" /> 

如果這仍然沒有工作,我建議實行this(我在我的應用登錄日誌文件中的錯誤做了(我爲admin)和存在一個通用的錯誤給用戶 )。

+0

我不使用Response.Redirect。我在web.config中定義了自定義錯誤頁面,並且用戶被自動重定向到異常錯誤頁面。 – nima 2011-04-23 10:07:13

+0

@nima然後,你可以嘗試我的更新? – 2011-04-23 10:13:51

+0

當我添加ResponseRewrite時,當我想訪問錯誤頁面中的Session時拋出異常: 會話狀態只能在enableSessionState設置爲true(無論是在配置文件中還是在Page指令中)時使用。另請確保System.Web.SessionStateModule或自定義會話狀態模塊包含在應用程序配置的 \ \ 部分中。 – nima 2011-04-23 10:21:22