我需要在.NET Core项目中实现自定义模型验证器。由于需要进行复杂的验证,因此我避免使用属性验证。我使用了
IValidator
接口和
AbstractValidator
类来实现自定义验证。
public class UserModel : IValidatableObject {
public int UserId { get; set; }
public string UserName { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
}
}
但我需要将验证逻辑与模型分开。因此,我在ASP.NET MVC中找到了“最初的回答” -这里。
public class ProjectModelValidatorProvider : ModelValidatorProvider {
public override IEnumerable<ModelValidator>
GetValidators(ModelMetadata metadata, ControllerContext context) {
if (metadata.ModelType == typeof(User))
yield return new UserModelValidator(metadata, context);
}
}
public class UserModelValidator : ModelValidator {
public UserModelValidator(ModelMetadata metadata, ControllerContext controllerContext)
: base(metadata, controllerContext) { }
public override IEnumerable<ModelValidationResult> Validate(object container) {
var model = (User)Metadata.Model;
if (string.IsNullOrEmpty(model.Login))
yield return new ModelValidationResult {
MemberName = "Login",
Message = "Please specify Login"
};
}
}
// register your Provider
ModelValidatorProviders.Providers.Add(new ProjectModelValidatorProvider());
利用
ModelValidatorProvider
和 ModelValidator
的帮助,我实现了这一点。但在.NET Core中如何实现这一点,以便我可以使用 ModelState.IsValid
验证模型?"Original Answer"翻译成"最初的回答"