Asp.Net Core webApi项目 自定义数据注释特性 进行模型验证

//自定义特性 重写ValidationAttribute的IsValid
public class Validate : ValidationAttribute
    {
        public int NotNum { get; set; }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var result = ValidationResult.Success;
            
//逻辑代码
            if (value as int? == NotNum)
            {
                result = new ValidationResult(ErrorMessage);
            }

            return result;
        }
    }
//模型
[Serializable]
    public class TestModel
    {

        [Range(0, 3, ErrorMessage = "0至3的范围")]
        [Validate(NotNum = 5 , ErrorMessage ="不能为5")]
        public int D { get; set; }

        [Range(0, 7, ErrorMessage = "0至7的范围")]
        [Validate(NotNum =8, ErrorMessage = "不能为8")]
        public int B{ get; set; }

    }

如果测试时,传入的值不符合你的条件,就会返回ErrorMessage。

不过需要注意的是该数据验证只能用于 ApiController,mvc的Controller无效。例如下

[ApiController]
    public class ValuesController : ControllerBase
    {}
//控制器

[HttpPost , Route("gdrr")]
        public string Gdr2(TestModel model)
        {
            return model.D+"";
        }

asp.net core 框架有自带的数据模型验证特性如下:

[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$")]

[StringLength(60, MinimumLength = 3)]

[Range(1, 100)]

[Required]

   

 如果非要在MVC中进行模型验证,且验证失败时返回400响应,则需在设置完验证特性后,在控制器的action中,加上一个验证,即可像apicontraoller那样,返回验证失败的响应了。如下:

[HttpGet("gdr")]
        public ActionResult<string> GetDifferResult([Validate( ErrorMessage = "范围错误")]int d)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            return "  -   " + d;
        }

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/93211381