说到验证, 那就需要做三件事:
定义验证规则
按验证规则进行检查
报告验证的错误. 在把错误报告给 API 消费者的时候, 报告里并不包含到底是服务端还是 API 消费者引起的错误, 这是状态码的工作. 而通常响应的 Body 里面会包含一组验证错误信息, API 消费者可以把这些信息展示给 API 消费者的用户.
定义验证规则
想要定义验证规则, 我们可以使用 ASP.NET Core 内置的方式或者使用第三方库.
在 ASP.NET Core 里面, 验证规则可以通过以下的方式来进行定义:
Data Annotations. 例如 [Required],[MaxLength] 等等.
自定义 Atrribute.
实现 IValidatableObject 接口.
验证什么?
验证的是输入数据, 而不是输出数据. 例如 POST 请求 Body 里面的参数就需要进行验证, 而 GET 请求返回响应里面的内容就不需要验证了.
按验证规则进行检查
ASP.NET Core 内置了一个 ModelState 对象, 它用来做验证规则检查.
ModelState 对象是一个 Dictionary(字典), 它既包含 model 的状态, 又包含 model 的绑定验证信息.
它也包含针对每个提交的属性值的错误信息的集合. 每当有请求进来的时候, 定义好的验证规则就会被检查.
如果有一个规则验证不通过的话, 那么 ModelState.IsValid()方法就会返回 false. 而且如果传进来的属性的类型不正确的话, 该方法也会返回 false.
报告验证错误信息
由于验证错误肯定是由客户端引起的, 所以返回的状态码肯定是 4xx. 针对验证错误, 具体的就是 422 Unprocessable entity 这个状态码.
之前也讲过 422 表示服务器理解了 entity 的 Content-Type, 并且语法也正确, 但是仍然无法处理所包含的结构数据. 例如: 语法正确, 但是语义不正确.
当报告验证错误信息的时候, 我们不仅要使用正确的状态码, 还需要在响应的 body 里面包含验证错误信息.
REST 并没有规定返回的错误信息的格式, 但是有一个标准却规定了此事: Validation Problem Details RFC, 它定义了这样的响应的 body 应该是什么样的. ASP.NET Core 内置了对这个标准的支持, 后续视频教程中可以看到.
来源: http://www.bubuko.com/infodetail-3379248.html