5

IValidatableObject를 구현하는 뷰 모델이 있고 여러 가지 유효성 검사 속성도 있습니다. 내 ApiController에서 액션을 호출하려고하면 속성 유효성 검사 만 수행됩니다. ASP.NET 웹 API가 IValidatableObject를 지원하지 않습니까? 단일 속성으로 표현할 수없는 복잡한 유효성 검사의 대안은 무엇입니까?ASP.NET 웹 API는 IValidatableObject를 지원합니까?

편집 : 어딘가에 줄을 따라 가야합니다. 유효성 검사가 신비하게 예상대로 작동하기 시작했습니다. IValidatableObject는 기본적으로 지원됩니다.

답변

1

webapi에서 IValidatableObject를 아직 사용해 보지 않았지만 설명서에 따라 DataAnnotations (DataAnnotationsModelValidatorProvider)의 유효성 검사 공급자가 IValidatableObject 유효성 검사를 제공해야합니다. 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/system.web.http.validation.providers(v=vs.108)

어쨌든, 당신은 또한 클래스를 꾸미는데 사용할 수있는 객체 레벨 ValidationAttribute를 사용할 수 있습니다 ... 그것은 IValidatableObject처럼 쉽지는 않지만 작동해야합니다.

0

현재로서는 IValidatableObject가 지원됩니다.

4

웹 API 2.1 (Microsoft.AspNet.WebApi nuget 5.1.x)을 사용하면 유효성 검사 속성이 유효하지 않은 경우 IValidatableObject의 Validate 메서드가 호출되지 않습니다. 따라서 클래스의 속성에 적용된 모든 유효성 검사 특성은 해당 클래스의 Validate 메서드가 호출되기 전에 먼저 유효한 것으로 전달되어야합니다.

예를 들어 RequiredAttribute의 속성이 있고 해당 필드에 값을 입력하지 않으면 IValidatableObject의 Validate 메서드 구현이 호출되지 않습니다. 기술적으로 버그는 아니지만 유효성을 검사 할 때마다 Validate 메서드가 호출 될 것으로 예상했습니다.

+0

나는 WebAPI 2를 의미한다고 생각하십니까? 어느 것이 일반적으로 MVC 5와 함께 제공됩니다. 어느 쪽이든, 당신이 경험 한 것은 예상 된 동작입니다. 이 동작을 확인하기 위해 dotPeek을 사용했습니다. 클래스 중 하나에 if 문이 있습니다. 슈퍼 불쾌합니다. –

+0

맞아, 나는 Web API 2를 언급하고 있었지만 나는 nuget 패키지 버전을 참조하고 있었다. 나는 그 대답의 일부를 분명히했습니다. 의견을 보내 주셔서 감사합니다. –

관련 문제