如何在asp.net core中通过属性名从模型中获得验证属性
本文关键字:属性 验证 模型 asp net core | 更新日期: 2023-09-27 18:06:04
我使用从ModelClientValidationRule
类返回验证参数的validator.GetClientValidationRules()
方法。而且,它可以完美地适用于所有验证属性,但遗憾的是在ASP中不行。净的核心。是否有一些公共API可以用来从ASP中的验证属性获取验证参数?网络核心?
我的模型:
public class Movie {
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
public string Title { get; set; }
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-''s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-''s]*$")]
[StringLength(5)]
public string Rating { get; set; }
}
这是我的方法,通过模型的属性名生成客户端验证规则:
IEnumerable<IDictionary<string, object>> GetValidationRulesByPropertyName(string propertyName) {
IList<IDictionary<string, object>> clientValidationRules = new List<IDictionary<string, object>>();
ModelMetadata modelMetaData = ModelMetadata.FromStringExpression(propertyName, this.ViewContext.ViewData);
IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(modelMetaData, this.ViewContext);
foreach(ModelValidator validator in validators) {
foreach(ModelClientValidationRule rule in validator.GetClientValidationRules()) {
IDictionary<string, object> clientValidationRule = new Dictionary<string, object>() {
["type"] = rule.ValidationType,
["message"] = rule.ErrorMessage
};
rule.ValidationParameters.AddTo(clientValidationRule);
clientValidationRules.Add(clientValidationRule);
}
}
return clientValidationRules;
}
}
这个问题在如何通过属性名称从模型获得验证属性中得到解决?
我正在使用流畅的验证。实现起来非常简单:https://github.com/JeremySkinner/FluentValidation
ViewModel验证示例:
public class PersonalDetailViewModelValidator : AbstractValidator<PersonalDetailViewModel>
{
public PersonalDetailViewModelValidator()
{
RuleFor(p => p.Address).Length(0, 99);
RuleFor(p => p.ZipCode).Length(0, 10);
RuleFor(p => p.City).Length(0, 100);
}
}