.Net HttpClient 使用請求數據

HttpClient 使用請求數據

0、初始化及全局設置

//初始化:必須先執行一次
#!import ./ini.ipynb

1、使用url 傳參

參數放在Url里,形如:http://www.baidu.com?name=zhangsan&age=18, GET、Head請求用的比較多。優點是簡單、方便,能被瀏覽器緩存;缺點是參數長度等限制較多,數據暴露url中,可能比較長。

/**URL傳參:適合簡單數據類型
*/
{//獲取響應字符串{var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");response.EnsureSuccessStatusCode();var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);}//獲取響應對象{var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");response.EnsureSuccessStatusCode();var result = await response.Content.ReadFromJsonAsync<BaseResult<Account>>();result.Display();}//直接獲取響應對象{var result = await SharedClient.GetFromJsonAsync<BaseResult<Account>>("api/Normal/GetAccount?id=1");result.Display();}}

2、使用路由傳參

路由參數,指參數使為URL的一部分,一般由后端API設定好,前端按規定使用即可。例如:后端指定/user/:id,前端使用/user/1,此時id為路由參數。

/*
** 路由參數:參數是URL的一部分,由后端指定
*/
{//大括號:方便折疊、開成單獨的作用域var response = await SharedClient.GetAsync("api/Normal/GetAccount/管理員01");//確定是成功的響應response.EnsureSuccessStatusCode();//獲取響應內容var content = await response.Content.ReadAsStringAsync();//輸出 Console.WriteLine(content);
}

3、使用請求頭

把請求數據放入請求頭中,傳給后端。當然也可以傳多個數據。不過,請求頭中傳數據限制比較多,一般只傳簡單的數據:比如jwt token 。

/*
* 請求頭: 值必須是字符串,如果有中文等需進行編碼
*/
{//設置請求頭//中文先編碼,服務端接收后要解碼var codedName = System.Net.WebUtility.UrlEncode("管理員01");//SharedClient是共用的,所以不能多次添加,先移除舊值if (SharedClient.DefaultRequestHeaders.Contains("name")){SharedClient.DefaultRequestHeaders.Remove("name");}//添加請求頭SharedClient.DefaultRequestHeaders.Add("name", codedName);var response = await SharedClient.GetAsync("api/Normal/GetAccountFromHeader");//確定是成功的響應response.EnsureSuccessStatusCode();//獲取響應內容var content = await response.Content.ReadAsStringAsync();//輸出 Console.WriteLine(content);
}

4、使用請求體

把數據放在請求體中,發送到服務端。可以是簡單的字符串,也可以是二進制數據(上傳文件)、form表單項、編碼過的form表單項、json、流式數據等形式,甚至是這個類型的組合。

說下個人的幾點理解:
1、不管哪種請求體數據,都是放在請求體中,以二進制形式通過網絡發往服務器,由服務器接收使用。客戶端發送請求數據需要與服務端接收相配合;
2、客戶端通過Content-Typey請求頭設置,告訴服務端請求發送的是哪種類型的數據;服務端根據Content-Type來識別、解析請求數據。常見的類型有:multipart/form-data、application/x-www-form-urlencoded、application/json、text/plain等;
3、ASP.NET Core中,默認的請求體類型是FormUrlEncodedContent,所以默認情況下,客戶端發送的請求數據是form表單項; asp.net 框架對json格式數據和表單數據進行了特殊處理,支持參數綁定等,可以使用[FromBody]特性,將請求數據綁定到對應的模型上。但普通的文本類型等不支持綁定等功能,需要從請求體中獲取原始數據,自行處理。
4、一次可發送多種格式數據,由統一的分隔符分隔。服務端可以從請求頭[] Content-Type: multipart/mixed; boundary=“d2e38916-df08-4fec-a40e-3e5179736f32”]拿到分隔符,然后根據分隔符將數據拆分出來。

HttpClient 中,請求體也分為這幾種(常見的)類型:

  1. MultipartFormDataContent
  2. FormUrlEncodedContent
  3. JsonContent
  4. StringContent
  5. ByteArrayContent
  6. StreamContent
  7. MultipartContent

MultipartFormDataContent :Form表單

Form表單,提交數據方式之一。

/*
*   Form表單,提交數據。一般為Put或Post提交。
*/
{// 創建一個 MultipartFormDataContent 對象, 用來存入 Form表單 各項及值var formContent = new MultipartFormDataContent();// 添加表單字段formContent.Add(new StringContent("1"), "id");formContent.Add(new StringContent("管理員01"), "name");// 發送POST請求var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);// 讀取響應內容string responseString = await response.Content.ReadAsStringAsync();Console.WriteLine(responseString);
}

FormUrlEncodedContent :Form表單 asp.net core 默認接收方式

/*FormUrlEncoded 提交數據 
*/
{//設置數據項var urlEncodedData = new List<KeyValuePair<string,string>>(){new KeyValuePair<string,string>(key:"id",value:"1"),new KeyValuePair<string,string>(key:"name",value:"管理員01"),};//FormUrlEncodedContent對象var formContent = new FormUrlEncodedContent(urlEncodedData);// 發送POST請求var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);// 讀取響應內容string responseString = await response.Content.ReadAsStringAsync();Console.WriteLine(responseString);
}

StringContent 普通文本(也包括很多格式,甚至是自定義格式。要和服務器配合)

/*普通文本方式提交數據
*/
{var requestContent = new StringContent("我是請求體第一段內容", Encoding.UTF8, "text/plain");var response = await SharedClient.PostAsync("/api/AdvancedPost/TextData", requestContent);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82712.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt還有希望嗎

&#x1f680;2025 年 Qt 框架價值大揭秘&#xff01;會持續閃耀嗎&#xff1f; 寶子們&#xff0c;今天來聊聊 Qt 框架在 2025 年的價值走向&#xff0c;這可是跨平臺應用開發的寶藏工具呀&#xff01; &#x1f31f;核心優勢穩穩拿捏Qt 的跨平臺能力絕了&#xff01; Windows…

Redis設計與實現——數據結構與對象

簡單動態字符串&#xff08;SDS&#xff09; SDS 的結構定義 len&#xff1a;記錄當前字符串的實際長度&#xff08;不包含 \0&#xff09;&#xff0c;獲取長度的時間復雜度為 O(1)。free&#xff1a;記錄未使用的空間大小&#xff0c;用于優化內存分配。buf[]&#xff1a;實…

NeurIPS 2025 截稿攻略

會議資訊 NeurIPS&#xff0c;全稱神經信息處理系統大會&#xff0c;是一個關于機器學習和計算神經科學的國際會議。NeurIPS是CCF&#xff08;計算機學會&#xff09;推薦的A類會議&#xff01;是機器學習領域內最具難度、水平最高且影響力最強的會議之一。它與ICML&#xff0…

Java中堆棧

文章目錄 Java中堆棧1. 棧&#xff08;Stack&#xff09;特點示例 2. 堆&#xff08;Heap&#xff09;特點示例 3. 核心區別4. 常見問題5. 內存可視化示例內存布局示意圖&#xff1a; 總結 Java中堆棧 在 Java 中&#xff0c;“堆棧” 通常指的是堆&#xff08;Heap&#xff0…

【類拷貝文件的運用】

常用示例 當我們面臨將文本文件分成最大大小塊的時&#xff0c;我們可能會嘗試編寫如下代碼: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默認10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…

打破產品思維--被討厭的勇氣--實戰5

課程&#xff1a;B站大學 記錄產品經理實戰項目系統性學習&#xff0c;從產品思維&#xff0c;用戶畫像&#xff0c;用戶體驗&#xff0c;增長數據驅動等不同方向理解產品&#xff0c;從0到1去理解產品從需求到落地的全過程&#xff0c;測試左移方向&#xff08;靠近需求、設計…

【Autosar SecOC 1.信息安全原理介紹】

這里寫目錄標題 1 背景2 了解黑客攻擊原理3 SecOC實現數據的真實性與完整性校驗3.1 數據身份驗證完成真實性驗證3.2 防止重放攻擊 1 背景 在今天的車載網絡中&#xff0c;大部分數據傳輸是在沒有任何特殊安全措施的情況下進行的。因此&#xff0c;一旦能夠直接訪問車輛的總線&a…

基于SpringBoot的校園周邊美食探索及分享平臺【附源碼+數據庫+文檔下載】

一、項目簡介 本項目是一個基于 SpringBoot Vue 的校園周邊美食探索與分享平臺&#xff0c;專為在校大學生開發&#xff0c;集美食推薦、好友互動、收藏分享于一體。 通過平臺&#xff0c;用戶可以探索學校周邊的美食店鋪、發布美食鑒賞、添加好友進行交流分享。同時&#x…

無償幫寫畢業論文

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行&#xff0c;脫產學習這么多年&#xff0c;終于熬出頭了&#xff0c;完成畢設后有空就去多看看親人好友&#xff0c;祝好&#xff01; 一、找一個論文模板(最好是overleaf) 廢話不多說&#…

15 個 Azure DevOps 場景化面試問題及解答

問題 1. 解釋 Azure DevOps YAML 管道的典型結構。 您可以從管道的整體結構開始&#xff0c;從觸發器開始。您也可以選擇解釋它可能包含的不同類型的階段&#xff1a;構建、測試、掃描、部署等。 Azure DevOps YAML 管道結構示例 觸發器指示管道運行。它可以是持續集成 (CI) 或…

Java 大視界 -- Java 大數據機器學習模型在元宇宙虛擬場景智能交互中的關鍵技術(239)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

本地不安裝oracle,還想連oracle

1.首先要用navicat,或者toad打開連接數據庫 2.安裝oracle客戶端&#xff0c;有時候OCI.dll需要看數據庫版本&#xff0c;我們Oracle數據庫是12C&#xff0c;可以用這個版本 3. 4.配置環境變量 變量名&#xff1a;NLS_LANG變量值&#xff1a;SIMPLIFIED CHINESE_CHINA.ZHS16GBK …

LabVIEW車牌自動識別系統

在智能交通快速發展的時代&#xff0c;車牌自動識別系統成為提升交通管理效率的關鍵技術。本案例詳細介紹了基于 LabVIEW 平臺&#xff0c;搭配大恒品牌相機構建的車牌自動識別系統&#xff0c;該系統在多個場景中發揮著重要作用&#xff0c;為交通管理提供了高效、精準的解決方…

deque底層數據結構以及和queue的異同

文章目錄 底層數據結構原理關鍵組成部分操作效率與其他容器的對比適用場景C STL中的實現細節總結 deque和queue的異同相同點不同點 deque&#xff08;雙端隊列&#xff09;是一種具有高效兩端插入和刪除操作的數據結構&#xff0c;常見于C標準庫&#xff08;STL&#xff09;和其…

WordPress 網站上的 jpg、png 和 WebP 圖片插件

核心功能 1. 轉換 AVIF 并壓縮 AVIF 將您 WordPress 網站上的 jpg、png 和 WebP 圖片轉換為 AVIF 格式&#xff0c;并根據您設置的壓縮級別壓縮 AVIF 圖片。如果原始圖片已經是 WordPress 6.5 以上支持的 AVIF 格式&#xff0c;則原始 AVIF 圖片將僅被壓縮。 2. 轉換 WebP 并…

Docker Volumes

Docker Volumes 是 Docker 提供的一種機制&#xff0c;用于持久化存儲容器數據。與容器的生命周期不同&#xff0c;Volumes 可以獨立存在&#xff0c;即使容器被刪除&#xff0c;數據仍然保留。以下是關于 Docker Volumes 的詳細說明&#xff1a; 1. 為什么需要 Volumes&#…

西電 | 2025年擬錄取研究生個人檔案錄取通知書郵寄通知

各位考生&#xff1a; 我校2025年碩士研究生錄取工作已結束&#xff0c;根據相關工作管理規定&#xff0c;現將個人檔案轉調及錄取通知書郵寄信息確認等有關事宜通知如下&#xff1a; 一、個人檔案轉調 &#xff08;郵寄檔案請務必使用EMS&#xff09; 1.全日制考生 錄取類…

ExcelJS庫的使用

ExcelJS 安裝 npm install exceljs新的功能! Merged fix: styles rendering in case when “numFmt” is present in conditional formatting rules (resolves #1814) #1815. Many thanks to andreykrupskii for this contribution!Merged inlineStr cell type support #15…

時空注意力機制深度解析:理論、技術與應用全景

時空注意力機制作為深度學習領域的關鍵技術&#xff0c;通過捕捉數據在時間和空間維度上的依賴關系&#xff0c;顯著提升了時序數據處理和時空建模能力。本文從理論起源、數學建模、網絡架構、工程實現到行業應用&#xff0c;系統拆解時空注意力機制的核心原理&#xff0c;涵蓋…

wxWidgets 3.2.8 發布,修復了GTK下,wxStaticText顯示文本異常的問題

詳細如下&#xff1a; 3.2.8 是穩定的 3.2 系列中的最新維護版本&#xff0c;現已在 GitHub 上提供&#xff0c;您可以從中下載帶有 所選 Windows 的庫源和文檔以及二進制文件 編譯器&#xff0c;例如 Microsoft Visual C、MinGW-w64 和 TDM-GCC。您還可以閱讀更新的文檔 版本&…