【发布时间】:2019-09-03 19:32:34
【问题描述】:
我需要在 .NET Core 项目中实现自定义模型验证器。我需要进行复杂的验证,所以我避免了属性验证。我用过
public class UserModel : IValidatableObject {
public int UserId { get; set; }
public string UserName { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
}
}
但我需要将验证逻辑与模型分开所以我在 ASP.NET MVC 中找到了this -
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 我能够验证模型?
【问题讨论】:
标签: c# .net asp.net-core .net-core