Мне было интересно, как я могу добиться проверки модели с помощью веб-API ASP.NET. У меня модель такая:
public class Enquiry
{
[Key]
public int EnquiryId { get; set; }
[Required]
public DateTime EnquiryDate { get; set; }
[Required]
public string CustomerAccountNumber { get; set; }
[Required]
public string ContactName { get; set; }
}
Затем у меня есть действие Post в моем контроллере API:
public void Post(Enquiry enquiry)
{
enquiry.EnquiryDate = DateTime.Now;
context.DaybookEnquiries.Add(enquiry);
context.SaveChanges();
}
Как добавить, if(ModelState.IsValid)
а затем обработать сообщение об ошибке, чтобы передать его пользователю?
c#
asp.net-web-api
КаллумВасс
источник
источник
System.Net.Http
,System.Net
System.Web.Http.Controllers
иSystem.Web.Http.Filters
.IncludeErrorDetailPolicy.Always
будет включать подробные сведения (с риском раскрытия подробностей для ваших пользователей)Может быть, это не то, что вы искали, но, возможно, приятно, чтобы кто-то знал:
Если вы используете .net Web Api 2, вы можете просто сделать следующее:
В зависимости от ошибок модели вы получите такой результат:
источник
Вот так, например:
Это вернет такой ответ (при условии JSON, но тот же базовый принцип для XML):
Вы, конечно, можете создать свой объект / список ошибок любым способом, например, добавив имена полей, идентификаторы полей и т. Д.
Даже если это «односторонний» вызов Ajax, такой как POST нового объекта, вы все равно должны вернуть что-то вызывающему - что-то, что указывает, был ли запрос успешным. Представьте себе сайт, на котором ваш пользователь добавит информацию о себе с помощью запроса AJAX POST. Что делать, если информация, которую они пытались ввести, недействительна - как они узнают, было ли их действие сохранения успешным или нет?
Лучший способ сделать это - использовать старые добрые коды состояния HTTP, например,
200 OK
и так далее. Таким образом, ваш JavaScript может правильно обрабатывать сбои, используя правильные обратные вызовы (ошибка, успех и т. Д.).Вот хороший учебник по более продвинутой версии этого метода с использованием ActionFilter и jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
источник
enquiry
объект, но не говорит, какие свойства недействительны? Итак, если я оставилCustomerAccountNumber
пустым, должно появиться сообщение проверки по умолчанию (требуется поле CusomterAccountNumber ..)errors.Add(error.ErrorMessage);
на,errors.Add(error.Exception.Message);
чтобы это работало для меня.Вы можете использовать атрибуты из
System.ComponentModel.DataAnnotations
пространства имен, чтобы установить правила проверки. Обратитесь к проверке модели - Майк Уоссон для подробностей.Также см. Видео ASP.NET Web API, часть 5: Custom Validation - Jon Galloway
Прочие ссылки
источник
Или, если вы ищете простой набор ошибок для своих приложений ... вот моя реализация этого:
Ответ на сообщение об ошибке будет выглядеть так:
источник
Добавьте ниже код в файл startup.cs
источник
Здесь вы можете проверить, чтобы отображать ошибки состояния модели одну за другой
}
источник
C #
...
Javascript
источник
У меня возникла проблема с реализацией принятого шаблона решения, при котором my
ModelStateFilter
всегда возвращалfalse
(а затем 400)actionContext.ModelState.IsValid
для определенных объектов модели:Я принимаю только JSON, поэтому я реализовал собственный класс связывания модели:
Который я регистрирую сразу после моей модели через
источник
Вы также можете генерировать исключения, как описано здесь: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
Обратите внимание: чтобы сделать то, что предлагает эта статья, не забудьте включить System.Net.Http
источник