异常信息的处理在程序中非常重要, 在asp.net mvc中提供异常属性拦截器进行对异常信息的处理,异常拦截器也没有什么的,只是写一个类,继承另一个类(System.Web.Mvc.FilterAttribute)和一个接口(System.Web.Mvc.IExceptionFilter),实现接口里面OnException方法。
代码实例:
异常拦截器类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace AttributeDemo.Common 7 { 8 ///9 /// 异常信息拦截器10 /// 11 public class ExceptionFillterAttribute : System.Web.Mvc.FilterAttribute, System.Web.Mvc.IExceptionFilter12 {13 #region 请求的action发生异常时会执行此方法14 ///15 /// 请求的action发生异常时会执行此方法16 /// 17 /// 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.UTF829 };30 31 32 filterContext.ExceptionHandled = true; //告诉系统,这个异常已经处理了,不用再处理33 34 //filterContext.ExceptionHandled = false; //告诉系统,这个异常没有处理,需要再处理 35 }36 #endregion37 38 39 }40 }
控制器类:
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 ///10 /// 测试异常拦截器11 /// 12 [AttributeDemo.Common.ExceptionFillter] //这个异常拦截属性写在这里表示对该控制器所有的action的异常都进行拦截13 public class ExceptionFillterTestController : Controller14 {15 //16 // GET: /ExceptionFillter/17 18 ///19 /// 测试异常拦截20 /// 21 ///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方法进行处理,处理结果请看下图: