ASP Web Api ModelState исключение, когда тип значения имеет значение null

В настоящее время я создаю ASP Web API и обнаружил, что если запросы выполняются к API, содержащему пустые значения, то я получаю "ужасные" исключения ошибок в ModelState, которые я не хочу показывать своим пользователям. Допустим, мое тело запроса выглядит так:

{"Id": "", "Name": "", "Description": "", "Created": "", "UserId": "", "AmountOfUsers": "", "MinimumAmountOfUsers": "", "Location": "", "Activated": "", "CategoryId": "", "Date": ""}

Тогда я получу следующее исключение ModelState для Id:

Error converting value {null} to type 'System.Int32'. Path 'Id', line 1, position 9

То же самое касается всех других типов значений.

У меня есть [Required] аннотация данных (с пользовательскими сообщениями об ошибках) для этих полей в моей модели, но это, похоже, не помогает.

Теперь мне интересно, что лучшее решение для решения этой проблемы. Все модели, которые пользователи публикуют / помещают, являются моделями представления, поэтому я думал о том, чтобы сделать все типы значений обнуляемыми, а затем приводить их в соответствие, когда я сопоставляю их с моделями баз данных. Я не уверен, что есть лучшие решения, и поэтому я хотел бы услышать ваше мнение.

1 ответ

Можно контролировать детали ошибки глобально, изменяя IncludeErrorDetailPolicy конфигурации веб-API.

https://msdn.microsoft.com/en-us/library/system.web.http.includeerrordetailpolicy(v=vs.118).aspx

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;

Кроме того, вы можете проверить наличие исключений в вашем методе действия и контролировать ответ, который отправляется обратно клиенту.

Также возможно создать глобальный фильтр исключений, чтобы контролировать детали

  public class MyExceptionHandler : IExceptionHandler {
    context.Result = new StatusCodeResult(HttpStatusCode.InternalServerError, context.Request);
   return Task.FromResult<object>(null);
  }

Затем зарегистрируйте этот фильтр в конфигурации

config.Services.Replace(typeof(IexceptionHandler), new MyExceptionHandler());
Другие вопросы по тегам