使用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 搜索 

能夠看出來過濾和搜索是不一樣的。 

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

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

 

但須要注意的是: 

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

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

相關文章
相關標籤/搜索