.Net Core Console 項目如何使用 HttpClient 與 Web 服務通信

image

前言

HttpClient 類是在 .NET Framework 4.5 和 .NET Core 中引入的新的 HTTP 客戶端類,是 .NET 用于發送和接收 HTTP 請求的類,相比之前的 WebRequestHttpWebRequest, 它提供了現代的、易用的 API,并且具有更好的性能和擴展性,使得在 .NET 應用程序中與 Web 服務進行通信變得更加方便。

通過 HttpClient,可以發送 GET、POST、PUT、DELETE 等類型的 HTTP 請求到指定的 Web Api,可以設置請求頭、請求體、超時時間等參數,接收 Web 服務返回的 HTTP 響應,包括響應頭、響應體等信息,并且 HttpClient 支持在異步環境中高效地發送和接收 HTTP 請求。

.Net Core 使用 HttpClient 的方法跟 .NET Framework 大同小異,如果您希望了解 .Net Core 是如何使用 HttpClient 的, 那么本文能給你一個很好的幫助。

Step By Step 步驟

  1. 創建一個 ASP.NET Core Console 項目

  2. 從 Nuget 安裝以下包

    Microsoft.Extensions.DependencyInjection

  3. 打開 Program.cs,引入依賴注入命名空間,依賴注入 HttpClient(留意注釋

    using Microsoft.Extensions.DependencyInjection;ServiceCollection services = new ServiceCollection();// 依賴注入 HttpClient
    services.AddHttpClient();// 依賴注入 NetUtil 類 
    services.AddScoped<NetUtil>();// 調用 NetUtil 類的 Test 方法
    using (var sp = services.BuildServiceProvider())
    {using (var scope = sp.CreateScope()){var spScope = scope.ServiceProvider;var demo = spScope.GetRequiredService<NetUtil>();await demo.Test();}
    }
    
  4. 新建 NetUtil 類,依賴注入 IHttpClientFactory 使用 HttpClient(留意注釋

    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using System.Text;class NetUtil
    {// 聲明IHttpClientFactoryprivate readonly IHttpClientFactory clientFactory;// 構造方法注入 IHttpClientFactorypublic NetUtil(IHttpClientFactory clientFactory){this.clientFactory = clientFactory;}public async Task Test(){// 事先準備的一個 Web Apivar url = "http://127.0.0.1:54327/net/mytest";var intervalTime = optIntervalSettings.Value;await GetEquip(url);}private async Task GetApiContent(UrlSettings url){var client = clientFactory.CreateClient();// 配置 Request 請求頭client.MaxResponseContentBufferSize = 2560000;client.DefaultRequestHeaders.Add("Accept", "*/*");client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");client.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.9");client.DefaultRequestHeaders.Add("Connection", "keep-alive");client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36");// 異步發送 Get 請求var res = await client.GetAsync(url);// 確保 HTTP 請求成功,提高程序的可靠性res.EnsureSuccessStatusCode();// 異步讀取響應消息var body = await res.Content.ReadAsStringAsync();Console.WriteLine(body);}
    }
    
  5. 至此,一個簡單的請求程序就完成了,可以運行并在 Postman 中進行測試

結語

總的來說,.NET Core HttpClient 是一個功能強大且易用的與 Web Api 通信的類,而且可以通過自定義 DelegatingHandlerHttpMessageHandler 擴展功能和自定義處理,是推薦的發送 HTTP 請求的類。

在使用時,應該盡量復用 HttpClient 實例,因為在短時間內頻繁創建和銷毀 HttpClient 實例可能會導致資源泄漏和性能問題,合理配置和處理 HTTP 請求和響應,以達到更好的性能和可靠性。

您覺得 HttpClient 怎么樣呢?歡迎留言討論。

我是老楊,一個奮斗在一線的資深研發老鳥,讓我們一起聊聊技術,聊聊人生。

都看到這了,求個點贊、關注、在看三連唄,感謝支持。

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

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

相關文章

2024 cicsn magicvm

文章目錄 參考檢查逆向vm::runvm::vmvm_alu::set_inputvm_mem::set_inputvm_id::runvm_alu::runvm_mem::run 漏洞思路參考的exp 參考 https://forum.butian.net/share/3048 https://akaieurus.github.io/2024/05/20/2024%E5%9B%BD%E8%B5%9B%E5%88%9D%E8%B5%9Bpwn-wp/#SuperHea…

9個輕量化的效率神器,保證你100%用得上

給你推薦9個輕量化的效率神器&#xff0c;保證你100%用得上。 首先介紹uTools的3個效率技巧 快速啟動 想要快速打開一個應用&#xff0c;不用去一堆的應用圖標里面去尋找&#xff0c;直接按下快捷鍵&#xff0c;輸入應用的名稱或首字母&#xff0c;便可以找到應用&#xff0…

GNeRF論文理解

文章目錄 主要解決什么問題&#xff1f;結構設計以及為什么有效果&#xff1f;個人想法。 主要解決什么問題&#xff1f; 本文主要想要解決的問題是 如何使用uncalibrated的照片來進行Nerf重建。雖然說現在已經有了一些方式可以對相機位姿進行估計和優化&#xff0c;但是他們限…

journal日志管理

1、systemd-journald詳解 systemd-journald日志默認保存在/run/log/journal中&#xff0c;重啟會被清楚&#xff0c;如果存在/var/log/journal目錄&#xff0c;systemd-journald日志會自動改為記入在這個目錄中&#xff0c;同時日志輪轉也會啟動&#xff0c;日志輪狀每月啟動&…

如何通過網站封裝App工具輕松創建移動應用

想象一下&#xff1a;將您的網站變成App 大多數網站管理員和開發人員多多少少都曾夢想過將自己的網站變成一款移動應用。傳統的App開發過程不僅繁瑣&#xff0c;還需要耗費大量的時間和資源。好消息是&#xff0c;現在有了網站封裝App工具&#xff0c;這一切都變得簡單了。您只…

HashMap 隨記

HashMap 構造器 HashMap 共有四個構造器&#xff1a; public HashMap(int initialCapacity, float loadFactor) {// 對于傳入的初始容量&#xff08;loadFactor&#xff09; 及 負載因子&#xff08;loadFactor&#xff09;的一些邊界判斷if (initialCapacity < 0) throw n…

Android Audio基礎——音頻配置xml文件加載(七)

通過前面的文章&#xff0c;我們知道在 AudioPolicyManager 初始化的時候回調用 loadConfig() 方法去加載 Audio 相關的配置信息&#xff0c;這里我們就來詳細看一下。 一、配置文件加載 1、AudioPolicyManager 源碼位置&#xff1a;/frameworks/av/services/audiopolicy/ma…

將下拉彈層渲染節點固定在觸發器的父元素中

將下拉彈層渲染節點固定在觸發器的父元素中 注意: 如果發現下拉菜單跟隨頁面滾動&#xff0c;或者需要在其他彈層中觸發 Select&#xff0c; 請嘗試使用 getPopupContainer{triggerNode > triggerNode.parentElement} 將下拉彈層渲染節點固定在觸發器的父元素中。

【MySQL】探索 MySQL 的 GROUP_CONCAT 函數

緣分讓我們相遇亂世以外 命運卻要我們危難中相愛 也許未來遙遠在光年之外 我愿守候未知里為你等待 我沒想到為了你我能瘋狂到 山崩海嘯沒有你根本不想逃 我的大腦為了你已經瘋狂到 脈搏心跳沒有你根本不重要 &#x1f3b5; 鄧紫棋《光年之外》 什么是 GRO…

遺傳算法與應用分析

遺傳算法的概念 簡單來說&#xff0c;遺傳算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一種模擬自然進化過程的優化算法。它通過模擬生物進化的遺傳機制&#xff0c;通過選擇、交叉和變異等操作&#xff0c;逐代優化搜索空間中的解。遺傳算法最初由約翰霍蘭…

【面試題-001】什么是面向對象?

文章目錄 什么是面向對象&#xff1f;與面向過程的區別&#xff1f;哪些語言是面向對象 哪些是面向過程&#xff1f; 什么是面向對象&#xff1f; 面向對象&#xff08;Object-oriented&#xff09;是一種程序設計范例&#xff0c;它通過將數據與對數據操作的函數&#xff08;…

V90 PN伺服驅動器附加報文750詳細使用介紹(算法分析)

1、V90PN伺服驅動器轉矩控制(750報文) V90 PN伺服驅動器轉矩控制(750報文)_v90pn轉矩控制-CSDN博客文章瀏覽閱讀3.4k次,點贊2次,收藏3次。主要介紹通過標準報文加附加報文 750 實現發送驅動報文的控制字、速度給定、轉矩限幅及附加轉矩給定的功能,首先就是V90在博途環境下…

算法學習筆記——對數器

對數器 對數器的實現&#xff1a; 你想要測的方法a&#xff08;最優解&#xff09;實現復雜度不好但是容易實現的方法b&#xff08;暴力解&#xff09;實現一個隨機樣本產生器&#xff08;長度也隨機、值也隨機&#xff09;把方法a和方法b跑相同的輸入樣本&#xff0c;看看得…

分享5款.NET開源免費的Redis客戶端組件庫

前言 今天大姚給大家分享5款.NET開源、免費的Redis客戶端組件庫&#xff0c;希望可以幫助到有需要的同學。 StackExchange.Redis StackExchange.Redis是一個基于.NET的高性能Redis客戶端&#xff0c;提供了完整的Redis數據庫功能支持&#xff0c;并且具有多節點支持、異步編…

總結2024/6/3

省流&#xff0c;藍橋杯國優&#xff0c;還是太菜了&#xff0c;聽說都是板子題但是還是寫不出來&#xff0c;靠暴力好歹沒有爆0&#xff0c;還是得多練&#xff0c;明年加油了

JWT 簽名用對稱加密還是非對稱加密?

一 概念梳理 對稱加密和非對稱加密是兩種基本的加密方法&#xff0c;它們在現代密碼學中扮演著核心角色&#xff0c;用于保護數據的安全和隱私。 1.1 對稱加密&#xff08;Symmetric Encryption&#xff09; 對稱加密是指加密和解密使用同一個密鑰的過程。這意味著發送方和接…

!力扣 108. 將有序數組轉換為二叉搜索樹

給你一個整數數組 nums &#xff0c;其中元素已經按升序排列&#xff0c;請你將其轉換為一棵 平衡二叉搜索樹。 示例 1&#xff1a; 輸入&#xff1a;nums [-10,-3,0,5,9] 輸出&#xff1a;[0,-3,9,-10,null,5] 解釋&#xff1a;[0,-10,5,null,-3,null,9] 也將被視為正確答案…

封裝了一個使用UICollectionViewLayout 實現的吸附居左banner圖

首先查看效果圖 實現的原理就是通過自定義UICollectionView layout&#xff0c;然后 設置減速速率是快速就可以達到吸附的效果 _collectionView.decelerationRate UIScrollViewDecelerationRateFast; 下面貼出所有代碼 這里是.h // // LBMiddleExpandLayout.h // Liubo…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《具有源荷不平衡特性的配電網智能軟開關和儲能聯合規劃》

本專欄欄目提供文章與程序復現思路&#xff0c;具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

CTF_RE學習

學了一個 map&#xff08;&#xff09;函數的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函數將 rawData 中的每個字符傳遞給 ord 函數。ord 函數返回給定字符的 Unicode 碼點 print(target) # 打印 map 對象的內存地址&…