我有以下模型:
public class ViewDataItem
{
public string viewName { get; set; }
public UpdateIndicator updateIndicator { get; set; }
}
使用以下枚举:
public enum UpdateIndicator
{
Original,
Update,
Delete
}
以及以下验证器:
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;
}
}
代码位于通过 JSON 接收数据的 WebAPI 中,将其反序列化为一个对象,然后进行验证,但出于某种原因,我可以在 updateIndicator
中发送我喜欢的任何内容,只要我不'输入一个大于枚举中最大索引的整数值(即 1,2 或 3 工作正常,但 7 会产生错误)。
我怎样才能得到这个来验证我收到的数据的输入,看看这个值是否真的在枚举中?
最佳答案
试试内置的IsInEnum()
RuleFor(x => x.updateIndicator).IsInEnum();
这会检查提供的枚举值是否在您的枚举范围内,如果不在,验证将失败:
"'updateIndicator' has a range of values which does not include '7'."
关于c# - FluentValidation 验证枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45013852/