WebApi 异常处理解决方案

1.继承ExceptionFilterAttribute类,重写OnException方法

 public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
    {
        //重写基类的异常处理方法
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            //业务异常处理
            if (actionExecutedContext.Exception is BusinessException)
            {
                var businessException = (BusinessException)actionExecutedContext.Exception;
                //自定义业务异常编码
                int businessExceptionCode = businessException.ErrorMessage.Code;
                //业务异常消息
                string businessExceptionMsg = businessException.Message;
                //异常消息Json串
                var err = new { errcode = businessExceptionCode, errmsg = businessExceptionMsg };
                string errMsg = JsonConvert.SerializeObject(err);

                //系统异常码
                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                oResponse.Content = new StringContent(" ");
                oResponse.Headers.Add("errMsg", errMsg);
                actionExecutedContext.Response = oResponse;
            }
            else
            {
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                //异常消息Json串
                var err = new { errcode = CommonErrorCode.ServiceError, errmsg = actionExecutedContext.Exception.Message };
                string errMsg = JsonConvert.SerializeObject(err);

                //系统异常码
                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                oResponse.Content = new StringContent(" ");
                oResponse.Headers.Add("errMsg", errMsg);
                actionExecutedContext.Response = oResponse;
            }

            base.OnException(actionExecutedContext);
        }
    }

 2. Global.asax中,Application_Start方法中添加过滤器

protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute());
        }

 3.例子:

控制器:

public class TestController : ApiController
    {
        [HttpGet]
        public string GetTest1()
        {
            
            return "value1";
        }

        [HttpGet]
        public string GetTest2()
        {
            throw new BusinessException(123456,"业务异常");
        }

        [HttpGet]
        public string GetTest3()
        {
            throw new Exception("系统异常");
        }
    }

 结果:

猜你喜欢

转载自www.cnblogs.com/liuqiyun/p/9151519.html
今日推荐