Поддерживает ли веб-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 будет вызываться каждый раз, когда я проверяю.

На данный момент IValidatableObject поддерживается.

Другие вопросы по тегам