2010-08-06 149 views
4

在asp.net,我可以定義自定義錯誤頁是這樣的:自定義HTTP錯誤頁

<configuration> 
    <system.web> 
     <customErrors mode="On"> 
      <error statusCode="404" redirect="/servererrors/404.aspx" /> 
     </customErrors> 
    </system.web> 
</configuration> 

現在我的問題:如果我更換,說404.aspx與AnyHTTP.aspx, 和希望得到http錯誤的數量來概括頁面,我怎麼得到那個錯誤數字?

回答

2

嘗試在此的customErrors設置(ASP.NET 3.5 SP1):

<customErrors mode="RemoteOnly" defaultRedirect="/servererrors/AnyHTTP.aspx" RedirectMode="ResponseRewrite"/> 

由於不同的解決方案,你也可以做到這一點在Global.asax中:

void Application_Error(object sender, EventArgs e) 
{ 
    Server.Transfer("/servererrors/AnyHTTP.aspx"); 
} 

和你的錯誤頁面,加載的最後一個錯誤:

Exception e = Server.GetLastError(); 

在Global.asax文件中使用Server.Transfer()很重要;使用Response.Redirect會拋出302錯誤,你會失去你想要捕捉的錯誤。

0

我建議不要使用web.config方法。 customErrors重定向到錯誤頁面,這沒有多大意義。從本質上說,它首先說「哦,是的,這將工作完美,你只需要去這裏,而不是」,然後說:「哦,我們沒有找到」。這真是一個錯誤(如果這裏沒有任何東西,那麼爲什麼服務器告訴我去這裏,顯然是用戶代碼,它看起來像你的服務器代碼搞砸了;他們去了正確的URI,然後你指示他們到錯誤的一個)。

使用Global.asax中的Server.Transfer(),設置一個默認的HTTPHandler,或者將IIS設置爲在您的實現中執行(不重定向到).aspx或其他文件。如果你想用相同的處理程序來管理每個錯誤,那麼你可以,例如,從global.asax中做一個Server.Transfer(),但包含一個關於錯誤類型的查詢字符串參數(無論是簡單的HTTP狀態碼還是更詳細的內容),或者在HttpContext中傳遞信息。