我有以下型号:FluentValidation验证枚举值
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;
}
}
的代码是一个的WebAPI通过JSON接收数据,反序列化到一个对象然后验证,但由于某种原因,我可以发送任何我喜欢的updateIndicator
,只要我没有放入一个大于枚举中最大索引的整数值(即1,2或3工作正常,但7会产生错误)。
我怎样才能得到这个验证我收到的数据的输入,看看这个值是否真的在Enum中?
您试图查看'viewName'是否是'UpdateIndicator'中的文本值? – krillgar
我想知道发送的文本值是否为“updateIndicator”实际存在于Enum UpdateIndicator中。也就是说,如果有人发送“香蕉”它应该返回一个错误,但如果有人发送“原始”(存在于枚举中)它应该验证就好。 – JaggenSWE
这不会发生。尝试使用无效值从Postman或Fiddler调用您的端点,然后查看会发生什么情况。它会给你枚举的默认值(第一个值)。如果你想防范这种情况,你可以让这个属性为空,但是你的验证不允许空值。 – krillgar