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

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

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

  • 相关阅读:
    典型并发任务
    第九章使用共享变量实现并发
    第八章goroutine和通道
    第七章接口
    第六章方法
    第一章
    第四章复合数据类型
    第三章基础数据类型
    Django其他
    VUE学习日记(五) ---- 组件定义 component
  • 原文地址:https://www.cnblogs.com/Godlovezk/p/9013542.html
Copyright © 2020-2023  润新知