先上代碼:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服務 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Filters.Add(new ApiExceptionAttribute()); } }
WebAPi的全局過濾器不同於MVC,MVC需要在FilterConfig里面添加,WebApi必須在WebApiConfig里面設置
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } }
WebApi異常處理過濾器:
public class ApiExceptionAttribute : ExceptionFilterAttribute { /// <summary> /// 控制器方法中出現異常,會調用該方法捕獲異常 /// </summary> /// <param name="filterContext">提供使用</param> public override void OnException(HttpActionExecutedContext filterContext) { WriteLog(filterContext); string jsonResult = new { code = 1, message = filterContext.Exception.Message }.ToJson(); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(jsonResult, System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }; filterContext.Response = result; base.OnException(filterContext); } }