je le modèle suivant:FluentValidation validate valeur Enum
public class ViewDataItem
{
public string viewName { get; set; }
public UpdateIndicator updateIndicator { get; set; }
}
Avec l'ENUM suivante:
public enum UpdateIndicator
{
Original,
Update,
Delete
}
Et le validateur suivant:
public class ViewValidator : AbstractValidator<ViewDataItem>
{
public ViewValidator()
{
RuleFor(x => x.viewName).NotEmpty().WithMessage("View name must be specified");
RuleFor(x => x.updateIndicator).SetValidator(new UpdateIndicatorEnumValidator<UpdateIndicator>());
}
}
public class UpdateIndicatorEnumValidator<T> : PropertyValidator
{
public UpdateIndicatorEnumValidator() : base("Invalid update indicator") {}
protected override bool IsValid(PropertyValidatorContext context)
{
UpdateIndicator enumVal = (UpdateIndicator)Enum.Parse(typeof(UpdateIndicator), context.PropertyValue.ToString());
if (!Enum.IsDefined(typeof(UpdateIndicator), enumVal))
return false;
return true;
}
}
Le code est dans un WebAPI qui reçoit des données via JSON, les désérialise sur un objet puis les valide, mais pour une raison quelconque je peux envoyer ce que je veux dans le updateIndicator
, tant que je ne mets pas une valeur entière plus grande que l'index max dans l'énumération (c'est-à-dire que 1, 2 ou 3 fonctionne bien, mais 7 générera une erreur).
Comment puis-je obtenir ceci pour valider l'entrée des données que je reçois pour voir si cette valeur est réellement dans l'Enum?
Vous essayez de voir si 'viewName' est une valeur de texte dans' UpdateIndicator'? – krillgar
J'essaie de voir si la valeur de texte envoyée en tant que "updateIndicator" existe réellement dans le Enum UpdateIndicator. Si quelqu'un envoie des "bananes", il devrait renvoyer une erreur, mais si quelqu'un envoie "Original" (qui existe dans l'énumération), il devrait juste valider. – JaggenSWE
Cela n'arrivera pas. Essayez d'appeler votre point de terminaison de Postman ou Fiddler avec une valeur non valide, et voyez ce qui se passe. Il vous donnera la valeur par défaut de l'enum (première valeur). Si vous voulez vous prémunir contre cela, vous pouvez rendre la propriété nullable, mais votre validation ne permet pas les valeurs nulles. – krillgar