程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(13)

構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(13)

編輯:關於ASP.NET

系統日志和異常的處理③

上一節我們講了如何捕獲異常和記錄日志,這一節我們講,沒有捕獲的或者忘記捕獲的異常包括404錯誤等,我們統一處理這個異常。

這一講是利用 Application_Error 捕獲所有異常,全局的異常處理為了減少代碼,統一異常處理,Application_Error位於Global.asax裡面,

protected void Application_Error(object sender, EventArgs e)

當一個異常在調用堆棧中沒有被處理,也沒有被框架代碼處理時,我們說這個異常未處理,它將被ASP.NET捕獲

它將捕獲所有 Application 級別的 UnhandleException 和 HttpException(比如:訪問的頁面不存在等)

總之,在這裡處理的話,那麼在頁面中的所有 try/catch 處理都可以不要了,但是我們為了記錄日志,在BLL層還是要try catch

對此未處理錯誤的處理方法是顯示一個頁面,列出該未處理異常的詳細情況。

我們通過 Application_Error事件把錯誤寫進對應的文件裡面或者數據庫中。

/// <summary>
        /// 全局的異常處理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Application_Error(object sender, EventArgs e)
        {
            string s = HttpContext.Current.Request.Url.ToString();
            HttpServerUtility server = HttpContext.Current.Server;
            if (server.GetLastError() != null)
            {
                Exception lastError = server.GetLastError();
                // 此處進行異常記錄,可以記錄到數據庫或文本,也可以使用其他日志記錄組件。
                ExceptionHander.WriteException(lastError);
                Application["LastError"] = lastError;
                int statusCode = HttpContext.Current.Response.StatusCode;
                string exceptionOperator = "/SysException/Error";
                try
                {
                    if (!String.IsNullOrEmpty(exceptionOperator))
                    {
                        exceptionOperator = new System.Web.UI.Control().ResolveUrl(exceptionOperator);
                        string url = string.Format("{0}?ErrorUrl={1}", exceptionOperator, server.UrlEncode(s));
                        string script = String.Format("<script language='javascript' type='text/javascript'>window.top.location='{0}';</script>", url);
                        Response.Write(script);
                        Response.End();
                    }
                }
                catch { }
            }
        }

嘿嘿,我創造了一個錯誤 Convert.ToInt16("dddd");下面是錯誤的顯示頁面

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved