MVC-AOP(面向切面编程)思想-Filter之IExceptionFilter-异常处理

HandleErrorAttribute

MVC中的基本异常分类:

      1. Action异常      T
      2. view异常    T,
      3. service异常     T,
      4. 控制器异常      F(异常get不到),
      5. 404异常           F(异常Get不到)

先写异常IExceptionFilter扩展类(还要注意一点是异常的类型,如果是前台的ajax请求出的异常,你返回html页面ajax是收不到的,所以要判断filterContext.HttpContext.Request.isAjaxRequest()),为真的话,返回自定义格式的json异常信息数组:

public void OnException(ExceptionContext filterContext)
        {
            string controller = filterContext.RouteData.Values["Controller"].ToString();
            string action = filterContext.RouteData.Values["Action"].ToString();
            filterContext.Controller.ViewData["ErrorMessage"] = filterContext.Exception.Message; //此处exception是异常类型实例
            //分级:自定义不同的异常类别,完成检测,然后分级处理
            if (filterContext.HttpContext.Request.IsAjaxRequest())  //如果是ajax请求,不能返回html的,要返回json异常信息
            {
                filterContext.Result = new JsonResult() {
                    Data=new { success=0,message="请联系管理员"}
                };
            }
            filterContext.Result = new ViewResult()  //返回html页面
            {
                ViewName = "~/Views/Shared/Error.cshtml", //出错后跳转的页面
                ViewData = filterContext.Controller.ViewData
            };
            filterContext.ExceptionHandled = true; //告诉系统异常已经处理了,不用再处理了
        }

扩展好了之后后面就是注册了:具体注册方法见 上一篇 Filter的三种注册方式.

经过测试,上面所提到的5种异常前三种是可以捕获并处理的.但是后面两种异常如何处理???

这里就要用到真正的全局异常处理了:

只是简单的做了个例子,具体用到还要自行扩展.

posted @ 2018-05-09 12:45  Godlovezk  阅读(309)  评论(0编辑  收藏  举报