I need to implement custom Model Validator in .NET Core project. I need to do complex validation so I am avoiding Attribute validation. I used
public class UserModel : IValidatableObject {
public int UserId { get; set; }
public string UserName { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
}
}
But I need to separate Validation logic from Model So I found this in 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());
With the help of ModelValidatorProvider and ModelValidator I achieved it. But how to achieve this in .NET Core such that with ModelState.IsValid I will be able to validate the model ?