c# - FluentValidation 验证枚举值

标签 c# json asp.net-web-api enums 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;
    }
}

代码位于通过 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/

相关文章:

c# - Winforms 和后台 worker

powershell - Fiddler 不拦截 PowerShell Web 请求

javascript - 要获取按钮上标签上的 JSON 文件值,请单击

c# - 我的自定义模型绑定(bind)程序的 AttemptedValue 包含键和值

c# - WebApi 返回 HTTP 响应后是否可以执行代码?

c# - SellectCommad.connection 属性未初始化

c# 业务应用程序中的不可变类

c# - 反射(reflection)继承的私有(private)方法

java - 将内部 JSON 对象提取为 Jackson 中的 String

javascript - 将 JSON 数组的一部分与另一个 JSON 数组组合起来