//自定义特性 重写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;
}