使用ASP.NET Core 3.x 構建 RESTful API - 4.2 過濾和搜索


向Web API傳遞參數

數據可以通過多種方式來傳給API。 

Binding Source Attributes 會告訴 Model 的綁定引擎從哪里找到綁定源。 

共有以下六種 Binding Source Attributes: 

  • [FromBody] 

    • 請求的 Body 

  • [FromForm] 

    • 請求的 Body 中的 form數據 

  • [FromHeader] 

    • 請求的 Header 

  • [FromQuery] 

    • 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 搜索 

可以看出來過濾和搜索是不同的。 

過濾:首先是一個完整的集合,然后根據條件把匹配/不匹配的數據項移除。 

搜索:首先是一個空的集合,然后根據條件把匹配/不匹配的數據項往里面添加。 

 

但需要注意的是: 

過濾和搜索這些參數並不是資源的一部分。 

只允許針對資源的字段進行過濾。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM