2014-10-17 75 views
2

我想要一種方法來攔截當發送格式錯誤的json到webapi端點時發生的異常,以便我可以返回語義錯誤代碼而不僅僅是500。 「修復你的破JSON或下地獄」)攔截webapi json格式錯誤

回答

4

您可以通過從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