[英]Is it possible to use a custom ModelState validation provider in ASP.NET Core?
我有以下 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 CreateValidators(ModelValidatorProviderContext context)
{
if (context.ModelMetadata.MetadataKind == ModelMetadataKind.Type)
{
var validatorType = typeof(MyCustomModelValidator<>)
.MakeGenericType(context.ModelMetadata.ModelType);
var validator = (IModelValidator)Activator.CreateInstance(validatorType);
context.Results.Add(new ValidatorItem
{
Validator = validator,
IsReusable = true
});
}
}
}
public interface ISelfValidatableModel
{
string Validate();
}
public class MyCustomModelValidator<T> : IModelValidator where T : ISelfValidatableModel
{
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>();
}
}
您需要將自定義提供程序添加到 MVC 選項中:
services.AddMvc(options =>
{
options.ModelValidatorProviders.Add(new MyCustomModelValidatorProvider());
});
框架內置示例:
DataAnnotationsModelValidatorProvider.cs
DataAnnotationsModelValidator.cs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.