AspNetCore 模型验证这一块相关的源码,主要是使用一个默认过滤器(为 ModelStateInvalidFilter,由 ModelStateInvalidFilterFactory生成),在经过默认过滤器,判定是否模型验证不通过,若验证不通过,将会调用一个默认工厂 InvalidModelStateResponseFactory(由 ApiBehaviorOptionsSetup 对 ApiBehaviorOptions 进行配置,实际上是一个 Func),来产生模型验证的返回结果(返回一个 BadRequestObjectResult 或 ObjectResult)。
简单描述一下数据流向:
用户请求 >> ModelStateInvalidFilter >> InvalidModelStateResponseFactory >> BadRequestObjectResult
其中,最主要的控制是 ApiBehaviorOptions 的 SuppressModelStateInvalidFilter 和 InvalidModelStateResponseFactory 属性。这两个属性,前者控制默认过滤器是否启用,后者被默认过滤器调用生成模型验证的结果。
内置的验证属性
[ValidateNever]:指示属性或参数应从验证中排除。 [CreditCard]:验证属性是否具有信用卡格式。 [Compare]:验证模型中的两个属性是否匹配。 [EmailAddress]:验证属性是否具有电子邮件格式。 [Phone]:验证属性是否具有电话号码格式。 [Range]:验证属性值是否在指定的范围内。 [RegularExpression]:验证属性值是否与指定的正则表达式匹配。 [Required]:验证字段是否不为 null。 [StringLength]:验证字符串属性值是否不超过指定长度限制。 [URL]:验证属性是否具有 URL 格式。 [Remote]:通过在服务器上调用操作方法来验证客户端上的输入。