timg

全局异常过滤器

新建一个类WebApiErrorHandleAttribute继承自ExceptionFilterAttribute,同样有一个虚方法OnException,重写这个方法来处理异常。

public class WebApiErrorHandleAttribute : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(
                HttpStatusCode.OK,
                new ResultInfo(ResultInfo.ResultStatus.error, actionExecutedContext.Exception.Message, null));
        }
    }

最后只需要在WebApiConfig里面添加一个过滤器

public static void Register(HttpConfiguration config)
        {
            // Web API 路由
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //Web API 过滤器
            config.Filters.Add(new WebApiErrorHandleAttribute());
        }

全局捕获异常

如果需要对整个应用程序都启用异常过滤,则需要做如下两步:

1.在Global.asax全局配置里面添加GlobalConfiguration.Configuration.Filters.Add(new WebApiErrorHandleAttribute());这一句,如下:

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

2.在WebApiConfig里面添加一个过滤器

public static void Register(HttpConfiguration config)
        {
            // Web API 路由
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //Web API 过滤器
            config.Filters.Add(new WebApiErrorHandleAttribute());
        }