#c# #asp.net-mvc #json #validation #asp.net-web-api
#c# #asp.net-mvc #json #проверка #asp.net-web-api
Вопрос:
Я борюсь с использованием System.ComponentModel.DataAnnotations
атрибутов проверки в ASP.NET Веб-API и ASP.NET MVC со string.Empty
null
значениями или. Что бы вы порекомендовали, это наилучшая практика для решения этой проблемы при использовании данных JSON?
Рассмотрим следующую модель
public class SampleModel
{
public string Foo { get; set; }
}
Теперь вы можете наблюдать следующее поведение в Web Api
и MVC
:
(1) API: { "Foo": null } => Foo == null
(2) API: { "Foo": "" } => Foo == ""
(3) MVC: { "Foo": null } => Foo == null
(4) MVC: { "Foo": "" } => Foo == null
Примечание: последнее преобразование (4) связано с ConvertEmptyStringToNull
параметром.
Теперь рассмотрим System.ComponentModel.DataAnnotations
использование атрибута проверки:
public class SampleModel
{
[RangeAttribute(0, 9)]
public string Foo { get; set; }
}
ModelState.IsValid
Проверка возвращается true
во всех 4 случаях, даже если ""
она явно не находится в диапазоне [0..9]
, потому что все атрибуты проверки проверяют строку.IsNullOrEmpty . Теперь можно было бы утверждать, что null
это также string.Empty
можно считать необязательным, но особенно в веб-API из-за отсутствия ConvertEmptyStringToNull
параметра IMHO это неверно. На мой взгляд, в веб-API необязательный элемент (like Foo
) является необязательным только в том случае, если он отсутствует или имеет null
значение. И string.Empty
является конкретным значением. Таким образом, мы не можем использовать System.ComponentModel.DataAnnotations
атрибуты проверки 1: 1.
Как вы справляетесь с этой проблемой, какова наилучшая практика и каковы намерения ASP.NET команда? Должны ли мы наследовать от всех System.ComponentModel.DataAnnotations
атрибутов проверки? Должны ли мы использовать наши собственные атрибуты в веб-API для проверки или мы должны написать собственные ModelMetadataProviders
?
PS: просто для очистки… string.Empty
null
обработка значений и в привязках моделей для меня в порядке.
Комментарии:
1. Существует логический метод string, который может помочь:
String.IsNullOrEmpty(stringValue)
2. В каком случае этот метод мне помогает? Выше я не проверял ничего, кроме атрибутов по умолчанию.