異常信息的處理在程序中很是重要, 在asp.net mvc中提供異常屬性攔截器進行對異常信息的處理,異常攔截器也沒有什麼的,只是寫一個類,繼承另外一個類(System.Web.Mvc.FilterAttribute)和一個接口(System.Web.Mvc.IExceptionFilter),實現接口裏面OnException方法。mvc
代碼實例:asp.net
異常攔截器類:測試
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace AttributeDemo.Common 7 { 8 /// <summary> 9 /// 異常信息攔截器 10 /// </summary> 11 public class ExceptionFillterAttribute : System.Web.Mvc.FilterAttribute, System.Web.Mvc.IExceptionFilter 12 { 13 #region 請求的action發生異常時會執行此方法 14 /// <summary> 15 /// 請求的action發生異常時會執行此方法 16 /// </summary> 17 /// <param name="filterContext"></param> 18 void System.Web.Mvc.IExceptionFilter.OnException(System.Web.Mvc.ExceptionContext filterContext) 19 { 20 //在這裏你能夠記錄發生異常時你要幹什麼,比例寫日誌 21 string message = filterContext.Exception.Message; 22 filterContext.Controller.ViewData["ErrorMessage"] = message; 23 24 //返回的結果給客戶端 25 filterContext.Result = new System.Web.Mvc.ContentResult() 26 { 27 Content = "出錯了:)", 28 ContentEncoding = System.Text.Encoding.UTF8 29 }; 30 31 32 filterContext.ExceptionHandled = true; //告訴系統,這個異常已經處理了,不用再處理 33 34 //filterContext.ExceptionHandled = false; //告訴系統,這個異常沒有處理,須要再處理 35 } 36 #endregion 37 38 39 } 40 }
控制器類:spa
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace AttributeDemo.Controllers 8 { 9 /// <summary> 10 /// 測試異常攔截器 11 /// </summary> 12 [AttributeDemo.Common.ExceptionFillter] //這個異常攔截屬性寫在這裏表示對該控制器全部的action的異常都進行攔截 13 public class ExceptionFillterTestController : Controller 14 { 15 // 16 // GET: /ExceptionFillter/ 17 18 /// <summary> 19 /// 測試異常攔截 20 /// </summary> 21 /// <returns></returns> 22 //[AttributeDemo.Common.ExceptionFillter] //這個異常攔截屬性寫在這裏表示只對該action的異常信息進行攔截 23 public ActionResult TestExceptionFillter() 24 { 25 int i = int.Parse("sd"); //這裏故意引起異常進行測試 26 return View(); 27 } 28 29 public ActionResult Index() 30 { 31 return View(); 32 } 33 34 } 35 }
當請求action名稱爲TestExceptionFillter是時,action方法引起了異常,就會執行異常攔截類裏面的OnException方法進行處理,處理結果請看下圖:.net