天天看點

EF架構~在global.asax裡寫了一個異常跳轉,不錯!

回到目錄

一般地,網站出現異常後,我們會通過設定web.config的方法來實作友好頁的顯示,這個方法比較常用,但捕捉的資訊不是很具體,在程式測試階段,我們可以通過global.asax來實作友好的,詳細的異常資訊的顯示,下面來看一下。

WEB.CONFIG裡的實作:

<customErrors mode="On">
    <error statusCode="404" redirect="/error/index404"/>
    <error statusCode="500" redirect="/error/inde500"/>
</customErrors>-       

而這種方式不能把具體出錯的資訊顯示出來,這在網站營運階段是可以接受的,但在網站測試階段是不可以的,下面看看我的global.asax方法:

protected void Application_Error(object sender, EventArgs e)
        {

            Exception ex = this.Context.Server.GetLastError();
            if (ex != null)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<b>系統出現如下錯誤:</b><br/><br/>");
                sb.Append("<b>發生時間:</b>&nbsp;&nbsp;" + DateTime.Now.ToString() + "<br/><br/>");
                sb.Append("<b>錯誤描述:</b>&nbsp;&nbsp;" + ex.Message.Replace("\r\n", "") + "<br/><br/>");
                sb.Append("<b>錯誤對象:</b>&nbsp;&nbsp;" + ex.Source + "<br/><br/>");
                sb.Append("<b>錯誤頁面:</b>&nbsp;&nbsp;" + HttpContext.Current.Request.Url + "<br/><br/>");
                sb.Append("<b>浏覽器IE:</b>&nbsp;&nbsp;" + HttpContext.Current.Request.UserAgent + "<br/><br/>");
                sb.Append("<b>伺服器IP:</b>&nbsp;&nbsp;" + HttpContext.Current.Request.ServerVariables.Get("Local_Addr").ToString() + "<br/><br/>");
                sb.Append("<b>方法名稱:</b>&nbsp;&nbsp;" + ex.TargetSite.ToString() + "<br/><br/>");
                sb.Append("<b>C#類名稱:</b>&nbsp;&nbsp;" + ex.TargetSite.DeclaringType.ToString() + "<br/><br/>");
                sb.Append("<b>成員變量:</b>&nbsp;&nbsp;" + ex.TargetSite.MemberType.ToString() + "<br/><br/>");
                Server.ClearError();

                VCommons.Http.CookieHelper.Write("Http_Errors", VCommons.Utils.UrlEncode(sb.ToString()));
                System.Web.HttpContext.Current.Response.Redirect("/Error/Index");
            }
        }      
Error下的Index内容如下:      
public ActionResult Index(string message)
        {
            ViewBag.Message = VCommons.Utils.UrlDecode(VCommons.Http.CookieHelper.Read("Http_Errors"));
            VCommons.Http.CookieHelper.Remove("Http_Errors");
            return View();
        }      
<div style="border: 2px solid #ddd; padding: 5px; margin: 5px;">
    <h3><span style="color: Red">錯誤資訊詳細内容</span></h3>
    <p style="padding: 5px; margin: 5px;font-size:12px;">@Html.Raw(ViewBag.Message)</p>
</div>      

這種方式是通過cookies來記錄異常消息的,顯示完之後立即清除,看一下效果:

作者:倉儲大叔,張占嶺,

榮譽:微軟MVP

QQ:853066980

支付寶掃一掃,為大叔打賞!

EF架構~在global.asax裡寫了一個異常跳轉,不錯!