我有以下ASP.NET CORE操作:
public async Task<IActionResult> Post([FromBody]Model model) { IValidator<Model> validator = new Validator<Model>(); Boolean valid = await validator.ValidateAsync(model); if (!valid) return HttpBadRequest(validator.GetErrors()); // Do something }
我没有在我的操作中定义验证器,而是如何将其与IOC和自定义ModelState验证提供程序集成?
解决方法
首先,您需要实现自定义
IModelValidatorProvider和
IModelValidator
请考虑我写的这个简单的例子.
public class MyCustomModelValidatorProvider : IModelValidatorProvider { public void GetValidators(ModelValidatorProviderContext context) { if (context.ModelMetadata.MetadataKind == ModelMetadataKind.Type) { var validatorType = (typeof(MyCustomModelValidator<>).MakeGenericType(context.ModelMetadata.ModelType)); var validator = Activator.CreateInstance(validatorType); context.Validators.Add((IModelValidator)validator); } } } public interface ISelfValidatableModel { string Validate(); } public class MyCustomModelValidator<T> : IModelValidator where T : ISelfValidatableModel { public bool Isrequired { get { return false; } } public IEnumerable<ModelValidationResult> Validate(ModelValidationContext context) { var model = (T)context.Model; var error = model.Validate(); if (!string.IsNullOrEmpty(error)) { return new List<ModelValidationResult>() { new ModelValidationResult(model.ToString(),error) }; } return Enumerable.Empty<ModelValidationResult>(); } }
services.AddMvc(options => { options.ModelValidatorProviders.Add(new MyCustomModelValidatorProvider()); });
框架内置示例:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。