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

来源:https://www.cnblogs.com/cgzl/archive/2020/01/05/12129696.html
-Advertisement-
Play Games

向Web API傳遞參數 數據可以通過多種方式來傳給API。 數據可以通過多種方式來傳給API。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 ...


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

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

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

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

 

但需要註意的是: 

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

只允許針對資源的欄位進行過濾。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常量池(也稱常量表):主版本號之後就是常量池的開始位置;java類所對應的常量池主要由常量池數量和常量池數組兩部分組成,常量池數量是主版本號之後的兩個位元組;常量池數組在常量池數量之後,常量池數組中不同元素的類型,結構是不同的,所以該數組長度是不同的,但是數組中的每一種元素的第一個位元組是標記位是一個u... ...
  • SqlSessionFactory SqlSessionFactory是單個資料庫映射關係經過編譯後的記憶體鏡像,主要作用是創建SqlSession。 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml ...
  • 我們經常會從網路上下載一些帶密碼的壓縮包,想要獲取裡面的內容,往往就要給提供商支付一些費用。想要白嫖其中的內容,常見的做法是百度搜索一些壓縮包密碼破解軟體,但後果相信體驗過的人都知道。本文將會利用 Python 破解壓縮包的密碼,這裡以 ZIP/RAR 為例。 ! 破解原理 其實原理很簡單,一句話概 ...
  • 為什麼Python使用縮進來分組語句? 為什麼簡單的算術運算得到奇怪的結果? 為什麼浮點計算不准確? 為什麼Python字元串是不可變的? 為什麼必須在方法定義和調用中顯式使用“self”? 為什麼不能在表達式中賦值? 為什麼Python對某些功能(例如list.index())使用方法來實現,而其 ...
  • 一、前言 只是講asp.net core 3.x通用主機的大致原理,這些東西是通過查看源碼以及自己根據經驗總結得來的,在文章中不會深入源碼,因為個人覺得懂原理就曉得擴展點,後期碰到有需求的時候再仔細去研究源碼也不遲。閱讀前你應該先去瞭解下(推薦博客園老A的博客): asp.net core中的依賴註 ...
  • 建造者模式(Builder)——從組裝電腦開始 建造者模式概括起來就是將不同獨立的組件按照一定的條件組合起來構成一個相對業務完整的對象。調用者無需知道構造的過程。 我們從組裝電腦開始 讓我們從買組裝電腦開始吧。 首先要買一個電腦,一般都有兩個選擇 —— 品牌電腦和組裝電腦,一般人為了省事和放心都會選 ...
  • 首先說說它的機制 處理HTTP請求並生成響應是一個很長的過程。路由只是這個過程的第一步。路由過程的最終結果是一個控制器。它將處理沒有映射到物理靜態文件的請求。 如下圖 操作調用程式,是核心,主要負責協調所有必要的步驟來處理請求,操作調用程式接受控制器工廠和控制器上下文,後者是一個容器對象,包含了路由 ...
  • 什麼樣的HTTP方法是安全的? 什麼樣的HTTP方法是安全的? 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 例如 HTTP GET 和 HTTP HEAD 就被認為是安全的,但需要註意的是,這並不意味著執行GET請求 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...