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());