2013-05-06 67 views
2

後,我現在用的是自定義錯誤在web.config屬性來處理自定義錯誤會話是空ResponseRewrite

像這樣:

<customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" /> 

引發錯誤後,頁面被重定向到錯誤頁面,但是當我訪問錯誤頁面中的會話時,它是空的。

我使用ResponseRewrite而不是ResponseRedirect的原因是因爲我通過使用elmah的項目通過Exception id

我甚至試圖創建新的空asp.net網站,它仍然發生。

我見過一些類似的問題,但沒有答案。

+0

你可以添加代碼或更多的細節?我沒有在Visual Studio 2012,IIS 8中重現錯誤。 – nmat 2013-05-26 16:00:15

+0

我正在使用visual studio 2010,iis6 – Amir 2013-05-27 07:08:14

回答

2

我轉載了這個問題,但我不明白爲什麼會發生這種情況。在Application_Error處理程序中,我可以訪問Session變量,但是當頁面加載時它變成null

我找到了解決此問題的解決方法here。您需要從web.config中刪除redirectMode,並在出現錯誤時手動執行Server.Transfer。因此,這是在web.config:

<customErrors mode="On" defaultRedirect="~/Error.aspx"/> 

這添加到Global.asax.cs文件:

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

要指定根據錯誤不同的錯誤頁面,您可以訪問的錯誤代碼是這樣的:

HttpException httpException = (HttpException) Server.GetLastError(); 
int httpCode = httpException.GetHttpCode(); 
switch (httpCode) 
{ 
    case 500: Server.Transfer("~/Pages/Error.aspx");break; 
    case 404: Server.Transfer("~/Pages/PageNotFound.aspx");break; 
    default: Server.Transfer("~/Pages/Error.aspx");break;  
} 
+0

好吧我確實設法使用您的建議使其正常工作,但是您是否知道如何從默認重定向基於我所在頁面的網頁配置? – Amir 2013-05-29 08:43:57

+0

@Amir你想爲每個頁面使用不同的重定向,還是隻想知道如何從web.config中讀取'defaultRedirect'屬性? – nmat 2013-05-29 09:36:20

+0

我知道如何閱讀默認的重定向,但是當我想使用不同的重定向時會發生什麼? – Amir 2013-05-29 10:49:44