zoukankan      html  css  js  c++  java
  • MVC 使用HandleErrorAttribute统一处理异常

        HandleErrorAttribute继承自FilterAttribute,且实现了IExceptionFilter接口。

        属于AOP思想的一种实现,MVC的四大筛选器(权限,动作,结果,异常)中的异常处理。

        Points:

        1)ExceptionHandled为true,表明异常已经处理,不再被拦截;反之,可能被再次拦截;

        2)通过设置ExceptionContext的Result(ActionResult类型)属性,表明结束当前请求

    Usage

    1.创建自定义异常处理

    public class AppHandleErrorAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            var json = new JsonResponse();
            json.success = false;
            var ex = filterContext.Exception;
            //deal custom exception…
            json.message = "系统异常,请联系管理员!";
            string msg = string.Format("系统异常:{0}", ex.Message);
            LogHelper.Error(msg, ex);   //Log4jNet
    
            filterContext.ExceptionHandled = true;
            var result = new JsonResult();
            result.Data = json;
            result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
            filterContext.Result = result;
    
            #region Sample Segment(样例)
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                JsonResult jsonResult = new JsonResult()
                {
                    Data = ""
                };
    
                LogHelper.Error(filterContext.Exception.Message);
    
                filterContext.Result = jsonResult;
            }
            else
            {
                filterContext.Result = new RedirectResult("Error");
            }
    
            filterContext.ExceptionHandled = true;
            #endregion
        }
    }

    2.注册

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new AppHandleErrorAttribute());
        }
    }

    参考:http://www.cnblogs.com/linjiancun/archive/2010/09/16/1827937.html

    3.使用

    如果要运用AppHandleError拦截异常,则将Controller继承自BaseController即可。

    [AppHandleError]
    public abstract class BaseController : Controller
    {
        //......
    }
  • 相关阅读:
    【C++】C++ primer 第三章学习笔记
    【C++】C++ primer 第二章学习笔记
    【C++】C++ primer 第一章学习笔记
    【C++】C++ sort函数
    【C++】C++ primer 第五版 Sales_item.h源码
    【其他】MarkDown的使用
    Dockerfile最佳实践
    docker跨主机通信--模拟flannel host-gw直接路由
    pod 生命周期hook钩子函数
    docker mysql 修改密码
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3774814.html
Copyright © 2011-2022 走看看