FluentValidation 不适用于 null 属性
FluentValidation not working for a null property
我正在使用 FluentValidation
和 IDataErrorInfo
,我有一个验证器定义如下:
public class StsInfoValidator : AbstractValidator<StsInfo>
{
public StsInfoValidator()
{
RuleFor(x => x.SomeProperty).Cascade(CascadeMode.StopOnFirstFailure)
.NotNull().NotEmpty().WithMessage("SomeProperty is required.");
}
}
但是,传入 null
属性 似乎不会触发验证器:
#region IDataErrorInfo
public string this[string columnName]
{
get
{
var validator = new StsInfoValidator();
if (columnName.Equals("SomeProperty"))
{
// SomeProperty below is null
if (validator.Validate(this, SomeProperty).Errors.Any())
return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
else
{
validator = null;
return string.Empty;
}
}
return string.Empty;
}
}
#endregion
你遇到的问题是,如果你选择使用需要 lambda 表达式来评估你的 属性 的 Validate
重载,你将不得不这样做:
而不是:
validator.Validate(this, SomeProperty);
你需要:
validator.Validate(this, s => s.SomeProperty);
这里是重载文档:
或者,您可以使用其他 Validate
重载并将 属性 的名称作为字符串传递:
validator.Validate(this, columnName);
或
validator.Validate(this, "SomeProperty");
这是验证的 属性 名称重载:
public string this[string columnName]
{
get
{
var validator = new StsInfoValidator();
if (columnName.Equals("SomeProperty"))
{
// SomeProperty below is null
//option 1
var result = validator.Validate(this,s => s.SomeProperty);
//option 2
//var result = validator.Validate(this, columnName);
//option 3
//var result = validator.Validate(this, "SomeProperty");
if (result.Errors.Any())
return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
else
{
validator = null;
return string.Empty;
}
}
return string.Empty;
}
}
我正在使用 FluentValidation
和 IDataErrorInfo
,我有一个验证器定义如下:
public class StsInfoValidator : AbstractValidator<StsInfo>
{
public StsInfoValidator()
{
RuleFor(x => x.SomeProperty).Cascade(CascadeMode.StopOnFirstFailure)
.NotNull().NotEmpty().WithMessage("SomeProperty is required.");
}
}
但是,传入 null
属性 似乎不会触发验证器:
#region IDataErrorInfo
public string this[string columnName]
{
get
{
var validator = new StsInfoValidator();
if (columnName.Equals("SomeProperty"))
{
// SomeProperty below is null
if (validator.Validate(this, SomeProperty).Errors.Any())
return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
else
{
validator = null;
return string.Empty;
}
}
return string.Empty;
}
}
#endregion
你遇到的问题是,如果你选择使用需要 lambda 表达式来评估你的 属性 的 Validate
重载,你将不得不这样做:
而不是:
validator.Validate(this, SomeProperty);
你需要:
validator.Validate(this, s => s.SomeProperty);
这里是重载文档:
或者,您可以使用其他 Validate
重载并将 属性 的名称作为字符串传递:
validator.Validate(this, columnName);
或
validator.Validate(this, "SomeProperty");
这是验证的 属性 名称重载:
public string this[string columnName]
{
get
{
var validator = new StsInfoValidator();
if (columnName.Equals("SomeProperty"))
{
// SomeProperty below is null
//option 1
var result = validator.Validate(this,s => s.SomeProperty);
//option 2
//var result = validator.Validate(this, columnName);
//option 3
//var result = validator.Validate(this, "SomeProperty");
if (result.Errors.Any())
return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
else
{
validator = null;
return string.Empty;
}
}
return string.Empty;
}
}