這篇文件需要搞清楚兩個概念:
1 怎么去設置友好的異常頁面
2 如何去收集頁面產生的異常信息
我們在網站開發時,一般需要設置兩個異常頁面,如404頁面(資源未找到),500頁面(系統內部錯誤,可能由某語句導致的某種異常),而如何去開啟這個異常功能網上說法不少,但感覺把問題搞復雜,以及自己不太確實的答案很多,現在我就具體說一下:
首先,兩個問題是獨立的,第一,友好的導演頁面的設置,第二如何去收集產生異常的信息
第一 友好的導演頁面的設置方法:
打開web.config文件,添加如下代碼即可,其它文件不需要設置
1 <customErrors mode="On" defaultRedirect="Error"> 2 <error statusCode="404" redirect="Error" /> 3 <error statusCode="500" redirect="~/Error/HttpError" /> 4 </customErrors>
這里需要說清楚的是:mode="On",表示開啟下面的錯誤異常友好頁面;mode="Off",關閉下面的異常友好頁面,即顯示出具體的操作異常(一般在網站開發階段用),mode="RemoteOnly",在服務器上開始錯誤詳細信息,而在客戶端關閉這個詳細信息(一般網站上線后選用)。
到目前為止,就第一個問題就OK了。
現在看第二個問題,如何去收集產生異常的信息
我們以MVC3為例來說一下,有兩種設置方法,第一對於某個controller或action的設置,可以在它上面加一個[HandlerErrorr]的特性,第二是對全局的所以controller的設置,可以在global.ascx里添加如下代碼:
1 public static void RegisterGlobalFilters(GlobalFilterCollection filters) 2 { 3 filters.Add(new HandleErrorAttribute()); 4 } 5 6 protected void Application_Start() 7 { 8 RegisterGlobalFilters(GlobalFilters.Filters); 9 }
值得慶幸的是MVC3本身的global.ascx已經集成了這部分的代碼,而如果希望輸出或者記錄這些異常信息,也可以顯示,現在我們將異常信息輸出到頁面上,看一下吧。
1 @model System.Web.Mvc.HandleErrorInfo 2 @{ 3 ViewBag.Title = "錯誤"; 4 } 5 <h2> 6 一個一般性的錯誤發生了</h2> 7 @if (Model != null) 8 { 9 <p> 10 錯誤 名稱:@Model.Exception.GetType().Name<br /> 11 錯誤發生目錄: @Model.ControllerName 12 <br /> 13 錯誤發生文件:@Model.ActionName</p> 14 <p> 15 錯誤詳細:</p> 16 <p>@Model.Exception.Message</p> 17 }
怎么樣,夠簡單吧,聰明的你肯定想到了什么,對,如果您想記錄這些信息,直接再寫一個filter去到global.ascx里注冊一下就OK了,呵呵。
回到目錄