2017-01-06 3 views
0

Web API 프로젝트에서 FluentValidation.WebApi 6.2.1.0을 사용하고 있습니다. FluentValidation으로 열거 형을 검증하고 사용자 정의 메시지를 리턴하는 방법이 있습니까?FluentValidation으로 enum을 확인하십시오.

내 컨트롤러 액션이

public IHttpActionResult Get([FromUri]CheckUpdateVM info) 
{ 
    ... 
} 

내 모델,

[Validator(typeof(CheckUpdateVMValidator))] 
public class CheckUpdateVM 
{ 
    public DeviceTypes Device { get; set; } 
} 

내가 이런 일을 위해 looing하여있어, 위의 코드와

public class CheckUpdateVMValidator : AbstractValidator<CheckUpdateVM> 
{ 
    public CheckUpdateVMValidator() 
    { 
     RuleFor(x => x.Device).Must(x => Enum.IsDefined(typeof(DeviceTypes), x)).WithMessage("xxx"); 
    } 
} 

, 다음과 같습니다, 모델 바인더 "Device"매개 변수의 값과 오류가있는 응답의 유효성을 검사합니다. 하지만 오류 메시지를 사용자 정의 할 수는 없습니다. ("장치"속성 유형을 문자열로 설정 한 경우에는 정상적으로 작동합니다.)

답변

0

이 시나리오에서는 사용자 정의 유효성 검사기를 만드는 것이 더 나은 방법 일 수 있습니다.

public class DeviceEnumValidator<T> : PropertyValidator { 

public DeviceEnumValidator() 
    : base("Invalid Enum value!") { } 

protected override bool IsValid(PropertyValidatorContext context) { 

    DeviceTypes enumVal= (DeviceTypes) Enum.Parse(typeof(DeviceTypes), context.PropertyValue); 

    if (!Enum.IsDefined(typeof(DeviceTypes), enumVal) 
     return false; 

    return true; 
} 
} 

DeviceEnumValidator를 사용하려면 유효성 검사 규칙을 정의 할 때 SetValidator를 호출 할 수 있습니다.

public CheckUpdateVMValidator() 
{ 
    RuleFor(x => x.Device).SetValidator(new DeviceEnumValidator<DeviceTypes>()); 
}