前言
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 { // 声明IHttpClientFactory private readonly IHttpClientFactory clientFactory; // 构造方法注入 IHttpClientFactory public NetUtil(IHttpClientFactory clientFactory) { this.clientFactory = clientFactory; } public async Task Test() { // 事先准备的一个 Web Api var 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
怎么样呢?欢迎留言讨论。
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。
都看到这了,求个点赞、关注、在看三连呗,感谢支持。