标签 标签 标签
- 一句话的事儿:
向Web API传递参数
数据可以通过多种方式来传给API。
Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源。
共有以下六种 Binding Source Attributes:
- [FromBody]
- 请求的 Body
- 请求的 Body
- [FromForm]
- 请求的 Body 中的 form数据
- 请求的 Body 中的 form数据
- [FromHeader]
- 请求的 Header
- 请求的 Header
- [FromQuery]
- Query string 参数
- Query string 参数
- [FromRoute]
- 当前请求中的路由数据
- 当前请求中的路由数据
[FromService]
- 作为 Action 参数而注入的服务
例如:
或:
默认情况下ASP.NET Core 会使用 Complex Object Model Binder,它会把数据从Value Providers那里提取出来,而Value Providers的顺序是定义好的。
但是我们构建API时通常会使用 [ApiController] 这个属性,为了更好的适应API它改变了上面的规则。更改后的规则如下:- 作为 Action 参数而注入的服务
[FromBody]
- 通常是用来推断复杂类型参数的。
- 通常是用来推断复杂类型参数的。
- [FromForm]
- 通常用来推断IFormFile和IFormFileCollection类型的Action参数。
- 通常用来推断IFormFile和IFormFileCollection类型的Action参数。
- [FromRoute]
- 用来推断Action的参数名和路由模板中的参数名一致的情况。
- 用来推断Action的参数名和路由模板中的参数名一致的情况。
- [FromQuery]
- 用来推断其它的Action参数。
- 用来推断其它的Action参数。
按照这些规则,在Action的参数前面使用这些属性,就可以避免让我们手动去寻找绑定源。当默认的行为规则需要被重写的时候,也可以使用这些 Binding Source Attributes。
过滤
过滤集合的意思就是指根据条件限定返回的集合。
例如我想返回所有类型为国有企业的欧洲公司。则URI为:GET /api/companies?type=State-owned®ion=Europe
所以过滤就是指:我们把某个字段的名字以及想要让该字段匹配的值一起传递给API,并将这些作为返回的集合的一部分。
搜索
针对集合进行搜索是指根据预定义的一些规则,把符合条件的数据添加到集合里面。
搜索实际上超出了过滤的范围。针对搜索,通常不会把要匹配的字段名传递过去,通常会把要搜索的值传递给API,然后API自行决定应该对哪些字段来查找该值。经常会是全文搜索。
例如:GET /api/companies?q=xxx
过滤 vs 搜索
可以看出来过滤和搜索是不同的。
过滤:首先是一个完整的集合,然后根据条件把匹配/不匹配的数据项移除。
搜索:首先是一个空的集合,然后根据条件把匹配/不匹配的数据项往里面添加。
但需要注意的是:
过滤和搜索这些参数并不是资源的一部分。
只允许针对资源的字段进行过滤。
- 本文作者:GeekPower - Felix Sun
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!