ASP.NET MVC 异常Exception拦截器Fillter

异常信息的处理在程序中非常重要, 在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     /// <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 }

控制器类:

 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方法进行处理,处理结果请看下图:

posted @ 2016-08-14 14:22  赛跑的蜗牛  阅读(1518)  评论(1编辑  收藏  举报