前言
HttpClient
類是在 .NET Framework 4.5 和 .NET Core 中引入的新的 HTTP 客戶端類,是 .NET 用于發送和接收 HTTP 請求的類,相比之前的 WebRequest
和 HttpWebRequest
, 它提供了現代的、易用的 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 步驟
-
創建一個 ASP.NET Core Console 項目
-
從 Nuget 安裝以下包
Microsoft.Extensions.DependencyInjection
-
打開 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();} }
-
新建 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);} }
-
至此,一個簡單的請求程序就完成了,可以運行并在 Postman 中進行測試
結語
總的來說,.NET Core HttpClient
是一個功能強大且易用的與 Web Api 通信的類,而且可以通過自定義 DelegatingHandler
和 HttpMessageHandler
擴展功能和自定義處理,是推薦的發送 HTTP 請求的類。
在使用時,應該盡量復用 HttpClient
實例,因為在短時間內頻繁創建和銷毀 HttpClient
實例可能會導致資源泄漏和性能問題,合理配置和處理 HTTP 請求和響應,以達到更好的性能和可靠性。
您覺得 HttpClient
怎么樣呢?歡迎留言討論。
我是老楊,一個奮斗在一線的資深研發老鳥,讓我們一起聊聊技術,聊聊人生。
都看到這了,求個點贊、關注、在看三連唄,感謝支持。