使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索

向Web API传递参数

数据能够经过多种方式来传给API。 api

Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源。 async

共有如下六种 Binding Source Attributes: ide

  • [FromBody] ui

    • 请求的 Body spa

  • [FromForm] orm

    • 请求的 Body 中的 form数据 xml

  • [FromHeader] 资源

    • 请求的 Header 路由

  • [FromQuery] string

    • Query string 参数 

  • [FromRoute] 

    • 当前请求中的路由数据 

  • [FromService] 

    • 做为 Action 参数而注入的服务 

 

例如: 

public async Task<ActionResult<CompanyDt0>> 
O references 
GetCompany( [FromRoute]Guid companyld)

或: 

public async Task<ActionResult<CompanyDt0>> 
O references 
GetCompany([FromQuery]Guid companyld)

 

默认状况下ASP.NET Core 会使用 Complex Object Model Binder,它会把数据从Value Providers那里提取出来,而Value Providers的顺序是定义好的。 

可是咱们构建API时一般会使用 [ApiController] 这个属性,为了更好的适应API它改变了上面的规则。更改后的规则以下: 

  • [FromBody] 

    • 一般是用来推断复杂类型参数的。 

  • [FromForm] 

    • 一般用来推断IFormFileIFormFileCollection类型的Action参数。 

  • [FromRoute] 

    • 用来推断Action的参数名和路由模板中的参数名一致的状况。 

  • [FromQuery] 

    • 用来推断其它的Action参数。 

     

按照这些规则,在Action的参数前面使用这些属性,就能够避免让咱们手动去寻找绑定源。当默认的行为规则须要被重写的时候,也可使用这些 Binding Source Attributes 

 

过滤

过滤集合的意思就是指根据条件限定返回的集合。 

例如我想返回全部类型为国有企业的欧洲公司。则URI为:GET /api/companies?type=State-owned&region=Europe 

因此过滤就是指:咱们把某个字段的名字以及想要让该字段匹配的值一块儿传递给API,并将这些做为返回的集合的一部分。 

 

搜索 

针对集合进行搜索是指根据预约义的一些规则,把符合条件的数据添加到集合里面。 

搜索实际上超出了过滤的范围。针对搜索,一般不会把要匹配的字段名传递过去,一般会把要搜索的值传递给API,而后API自行决定应该对哪些字段来查找该值。常常会是全文搜索。 

例如:GET /api/companies?q=xxx 

 

过滤 vs 搜索 

能够看出来过滤和搜索是不一样的。 

过滤:首先是一个完整的集合,而后根据条件把匹配/不匹配的数据项移除。 

搜索:首先是一个空的集合,而后根据条件把匹配/不匹配的数据项往里面添加。 

 

但须要注意的是: 

过滤和搜索这些参数并非资源的一部分。 

只容许针对资源的字段进行过滤。

相关文章
相关标签/搜索