2014-10-17 4 views
2

Я хотел бы иметь способ перехватить исключение, которое возникает, когда вы отправляете неправильный json в конечную точку webapi, чтобы я мог вернуть семантический код ошибки, а не только 500. (например, «Фикс сломанной JSON или идти в ад»)Ошибки форматирования intercept 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

+0

@ user20358 Да. Просто зарегистрируйте фильтр в 'Global.asax.cs':' GlobalConfiguration.Configuration.Filters.Add (new ValidationFilterAttribute()); ' –

+0

Спасибо. Должен ли я использовать ExceptionFilterAttribute или ExceptionHandler или MessageHandler. Какая из них лучше? – user20358

Смежные вопросы