Поддерживает ли веб-API ASP.NET IValidatableObject?
У меня есть модель представления, которая реализует IValidatableObject, а также имеет несколько атрибутов проверки. Когда я пытаюсь вызвать действие на моем ApiController, выполняется только проверка атрибута. Веб-API ASP.NET не поддерживает IValidatableObject? Какая альтернатива для комплексной проверки, которая не может быть представлена одним атрибутом?
Изменить: Где-то вдоль линии, я, должно быть, что-то выдумал. Проверка таинственным образом начала работать, как и ожидалось. Похоже, что IValidatableObject определенно поддерживается по умолчанию.
3 ответа
Еще не пробовал IValidatableObject на webapi, но он должен поддерживаться в соответствии с документацией, которую провайдер валидации для аннотаций данных (DataAnnotationsModelValidatorProvider) обеспечивает также валидацию IValidatableObject. Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.web.http.validation.providers%28v=vs.108%29
В любом случае, вы также можете использовать объектный атрибут ValidationAttribute, который можно использовать для оформления класса... Это не так просто, как IValidatableObject, но должно работать.
В Web API 2.1 (Microsoft.AspNet.WebApi nuget 5.1.x) я обнаружил, что метод Validate IValidatableObject не вызывается, если какой-либо из атрибутов проверки недействителен. Следовательно, все атрибуты проверки, которые были применены к свойствам вашего класса, должны сначала пройти как действительные, прежде чем будет вызван метод Validate этого класса.
Если, например, у вас есть свойство с RequiredAttribute
и вы не помещаете значение в это поле, ваша реализация метода Validate IValidatableObject не будет вызвана. Хотя технически это не ошибка, я ожидал, что метод Validate будет вызываться каждый раз, когда я проверяю.