拦截webapi json格式错误

问题描述:

我想要一种方法来拦截当发送格式错误的json到webapi端点时发生的异常,以便我可以返回语义错误代码而不仅仅是500。 “修复你的破JSON或下地狱”)拦截webapi json格式错误

您可以通过从ActionFilterAttribute派生创建自定义的验证筛选器属性:

public class ValidationFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      actionContext.Response = actionContext 
            .Request 
            .CreateErrorResponse(HttpStatusCode.BadRequest, 
                  actionContext.ModelState); 
     } 
    } 
} 

现在,你既可以用它装点你的行动:

[HttpGet] 
[ValidationFilter()] 
public string DoSomethingCool() 

或通过全球注册它的config

config.Filters.Add(new ValidationFilterAttribute()); 
+0

这可以在全球范围内,而不必装饰与validationfilter属性的任何方法呢? – user20358 2015-04-20 10:44:38

+0

@ user20358是的。只需在'Global.asax.cs'中注册过滤器:'GlobalConfiguration.Configuration.Filters.Add(new ValidationFilterAttribute());' – 2015-04-20 11:00:04

+0

谢谢。我应该使用ExceptionFilterAttribute还是ExceptionHandler或MessageHandler。哪一个更好? – user20358 2015-04-20 15:10:09