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("系统异常"); } }
结果: