码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-05-09 15:10:32      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:异常   str   异常类   EDA   blank   blog   http   再处理   target   

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种异常前三种是可以捕获并处理的.但是后面两种异常如何处理???

技术分享图片

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

技术分享图片

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

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

标签:异常   str   异常类   EDA   blank   blog   http   再处理   target   

原文地址:https://www.cnblogs.com/Godlovezk/p/9013542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!