加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 是否可以在ASP.NET Core中使用自定义ModelState

发布时间:2020-12-16 07:06:48 所属栏目:asp.Net 来源:网络整理
导读:我有以下ASP.NET CORE操作: public async TaskIActionResult Post([FromBody]Model model) { IValidatorModel validator = new ValidatorModel(); Boolean valid = await validator.ValidateAsync(model); if (!valid) return HttpBadRequest(validator.Get
我有以下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>();
    }
}

您需要将自定义提供程序添加到MVC选项中

services.AddMvc(options =>
{
    options.ModelValidatorProviders.Add(new MyCustomModelValidatorProvider());
});

框架内置示例:

DataAnnotationsModelValidatorProvider.cs

DataAnnotationsModelValidator.cs

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读