2017-01-06 1 views
0

J'utilise FluentValidation.WebApi 6.2.1.0 dans le projet API Web. Existe-t-il un moyen de valider enum avec FluentValidation et de renvoyer un message personnalisé?Validation d'enums avec FluentValidation

mon action du contrôleur est la suivante,

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

Mon modèle,

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

Je looing quelque chose comme ça,

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

Avec code ci-dessus, liant modèle valider la valeur du paramètre "Device" et la réponse avec une erreur. mais je ne peux pas personnaliser le message d'erreur. (Si je mets le type de propriété "Device" à string, cela fonctionne très bien.)

Répondre

0

La création d'un validateur personnalisé pourrait être une meilleure approche dans ce scénario.

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; 
} 
} 

Pour utiliser DeviceEnumValidator, vous pouvez appeler SetValidator lors de la définition d'une règle de validation.

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