找回密码
 立即注册
快捷导航

[C#] HttpClient正确的使用方法及拓展

[复制链接]
鲁棒 2023-9-7 02:25:46 | 显示全部楼层

https://www.bilibili.com/video/BV1u94y1x7RQ/

HttpClient 是实现了 Disposed 接口的,所以按理来说是这么使用的:

using var client = new HttpClient();

如果每次发送请求都要new一个HttpClient,那么会占用不同的端口,且不会再短时间内释放掉,所以,会出现问题,也就不推荐这么使用了;

我们一般使用官方推荐的 HttpClient工厂方式;

安装

  • Microsoft.Extensions.Http
  • Microsoft.Extensions.DependencyInjection
using Microsoft.Extensions.DependencyInjection;

var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient();     // 全局的client
serviceCollection.AddHttpClient("testClient", (client) => {    // 加了一个名字
    client.BaseAddress = nwe Uri("https://www.baidu.com");
    client.DefaultRequestHeaders.Add("aa", "bbbbbbbb");
});

serviceCollection.AddHttpClinet<Test2Service>((client)=>{
    client.DefaultRequestHeaders.Add("bb", "cccccccc");
});

serviceCollection.AddSingleton<TestService>();

var service = serviceCollection.BuildServiceProvider();

var httpClientFactory = service.GetRequiredService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient();
var str = client.GetStringAsync("https://www.so.com");
Console.WriteLine(str);

// --------------

var testService = service.GetRequiredService<TestService>();
Console.WriteLine(await testService.GetString());

// --------------

var test2Service = service.GetRequiredService<Test2Service>();
Console.WriteLine(await test2Service.GetString());

新建一个 TestService.cs 文件:

namespace HttpclientTest
{
    internal class TestService{
        private HttpClient _client;
        public TestService(IHttpClientFactory clientFactory){
            _client = clientFactory.CreateClient("testClient");
        }

        public async Task<string> GetString(){
            return await _client.GetStringAsync("/api/ccccc");            
        }
    }
}

新建一个 Test2Service.cs 文件

namespace HttpclientTest
{
    internal class Test2Service{
        private HttpClient _client;
        public Test2Service(HttpClient httpClient){
            _client = httpClient;
        }

        public async Task<string> GetString(){
            return await _client.GetStringAsync("/api/ccccc");            
        }
    }
}

未完

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-22 16:18

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表