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

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

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

    以上就是:MVC-AOP(面向切面编程)思想-Filter之IExceptionFilter-异常处理 的全部内容。

    本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
    Email:[email protected]


    0 条回复 A 作者 M 管理员
      所有的伟大,都源于一个勇敢的开始!
    欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论