將(jiang)不確(que)(que)定變為確(que)(que)實~請自己搞(gao)清楚異常頁面的設置(zhi)方法(網上那些資(zi)料說的基本都有問題!)
這篇(pian)文(wen)件需要搞清楚兩個概念:
1 怎么去設置(zhi)友好的(de)異(yi)常頁面(mian)
2 如何(he)去收集頁面產生的異常信息(xi)
我們(men)在(zai)網站(zhan)開發時,一(yi)般需要設置兩個異(yi)常頁面,如404頁面(資源未(wei)找到),500頁面(系統內部(bu)錯誤(wu),可(ke)能(neng)由某(mou)語句導致(zhi)的(de)某(mou)種異(yi)常),而如何去開啟這個異(yi)常功能(neng)網上說法(fa)不少,但感覺把問題(ti)搞復雜(za),以及自己不太確實的(de)答案很多,現在(zai)我就具體說一(yi)下:
首先,兩個問題是獨立的(de),第(di)一,友好(hao)的(de)導演頁面(mian)的(de)設置,第(di)二如何去收集(ji)產生異常的(de)信息
第一 友(you)好的導演頁面的設(she)置方法:
打(da)開web.config文件,添加如下(xia)代碼即可(ke),其它文件不(bu)需要(yao)設置
1 <customErrors mode="On" defaultRedirect="Error"> 2 <error statusCode="404" redirect="Error" /> 3 <error statusCode="500" redirect="~/Error/HttpError" /> 4 </customErrors>
這里需要(yao)說(shuo)清(qing)楚的(de)是:mode="On",表(biao)示(shi)(shi)開(kai)(kai)啟下(xia)面的(de)錯(cuo)誤異常(chang)友好頁面;mode="Off",關(guan)閉下(xia)面的(de)異常(chang)友好頁面,即顯(xian)示(shi)(shi)出具(ju)體的(de)操作(zuo)異常(chang)(一(yi)般(ban)(ban)在網站開(kai)(kai)發階段用),mode="RemoteOnly",在服務器上開(kai)(kai)始錯(cuo)誤詳細信息,而(er)在客戶(hu)端關(guan)閉這個詳細信息(一(yi)般(ban)(ban)網站上線(xian)后選用)。
到目前(qian)為止,就第一個(ge)問題就OK了。
現(xian)在看第二個問題,如何(he)去收集產生異常的信息
我們以(yi)(yi)MVC3為例(li)來說(shuo)一下(xia),有兩(liang)種設置(zhi)方法,第一對(dui)于(yu)某(mou)個controller或action的(de)設置(zhi),可以(yi)(yi)在它上面加(jia)一個[HandlerErrorr]的(de)特性,第二是對(dui)全局的(de)所(suo)以(yi)(yi)controller的(de)設置(zhi),可以(yi)(yi)在global.ascx里(li)添加(jia)如下(xia)代(dai)碼(ma):
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已經集成了(le)這部分的代碼,而如果希望輸(shu)出(chu)或者記錄(lu)這些異(yi)常(chang)信(xin)息,也可以顯示(shi),現(xian)在我(wo)們(men)將異(yi)常(chang)信(xin)息輸(shu)出(chu)到頁面(mian)上,看一下吧。
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 錯誤發生(sheng)目錄: @Model.ControllerName 12 <br /> 13 錯誤發生文件:@Model.ActionName</p> 14 <p> 15 錯誤詳細:</p> 16 <p>@Model.Exception.Message</p> 17 }
怎么樣,夠(gou)簡(jian)單吧,聰明(ming)的你肯定想到了什么,對,如果您想記(ji)錄這些信(xin)息,直接再(zai)寫一(yi)個filter去(qu)到global.ascx里注冊一(yi)下就OK了,呵(he)呵(he)。
回到目錄