来自 App 常量的流利验证自定义检查
Fluent validation custom check from App constants
如何验证 Status 是否存在于我的静态 class?
public static class AppConstants
{
public static class FormStatus
{
public static string NEW = "New";
public static string COMPLETE = "Complete";
public static string DELETED = "Deleted";
}
}
验证者class
public SetStatusCommandValidator(IApplicationDbContext context)
{
_context = context;
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage("Status is required.")
.Must(???).WithMessage("Status is not a valid.");
}
基本上,我如何验证状态值必须是 AppConstants.FormStatus 之一?
谢谢!
您可以在 Must
谓词中内联创建集合/数组并使用 .Contains
:
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage(...)
.Must(v => new [] { AppConstants.FormStatus.NEW, AppConstants.FormStatus.COMPLETE, AppConstants.FormStatus.DELETED }.Contains(v)).WithMessage(...);
或者,您可以将另一个 属性 添加到 FormStatus
以包含所有这些:
public static class AppConstants
{
public static class FormStatus
{
// Statuses here
public static string[] ALL_STATUSES = new string[] { NEW, COMPLETE, DELETED };
}
}
然后你的 Must
谓词变成 Must(v => AppConstants.FormStatus.ALL_STATUSES.Contains(v)).WithMessage(...);
抱歉,如果语法不完全正确并且不能立即编译,我在 phone 上写了它,没有办法仔细检查它。
由于您没有使用枚举(这将允许您使用 .IsEnumName()
),我认为您需要创建一个自定义验证器函数:
private bool BeAValidStatus(string status)
{
return typeof(AppConstants.FormStatus)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Where(f => f.GetRawConstantValue() == status)
.Any();
}
然后在规则中使用自定义函数:
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage("Status is required.")
.Must(BeAValidStatus).WithMessage("Status is not a valid.");
如何验证 Status 是否存在于我的静态 class?
public static class AppConstants
{
public static class FormStatus
{
public static string NEW = "New";
public static string COMPLETE = "Complete";
public static string DELETED = "Deleted";
}
}
验证者class
public SetStatusCommandValidator(IApplicationDbContext context)
{
_context = context;
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage("Status is required.")
.Must(???).WithMessage("Status is not a valid.");
}
基本上,我如何验证状态值必须是 AppConstants.FormStatus 之一?
谢谢!
您可以在 Must
谓词中内联创建集合/数组并使用 .Contains
:
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage(...)
.Must(v => new [] { AppConstants.FormStatus.NEW, AppConstants.FormStatus.COMPLETE, AppConstants.FormStatus.DELETED }.Contains(v)).WithMessage(...);
或者,您可以将另一个 属性 添加到 FormStatus
以包含所有这些:
public static class AppConstants
{
public static class FormStatus
{
// Statuses here
public static string[] ALL_STATUSES = new string[] { NEW, COMPLETE, DELETED };
}
}
然后你的 Must
谓词变成 Must(v => AppConstants.FormStatus.ALL_STATUSES.Contains(v)).WithMessage(...);
抱歉,如果语法不完全正确并且不能立即编译,我在 phone 上写了它,没有办法仔细检查它。
由于您没有使用枚举(这将允许您使用 .IsEnumName()
),我认为您需要创建一个自定义验证器函数:
private bool BeAValidStatus(string status)
{
return typeof(AppConstants.FormStatus)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Where(f => f.GetRawConstantValue() == status)
.Any();
}
然后在规则中使用自定义函数:
RuleFor(v => v.Status)
.NotNull()
.NotEmpty().WithMessage("Status is required.")
.Must(BeAValidStatus).WithMessage("Status is not a valid.");