如何在.net和.net核心中使用HttpClient调用多个客户端apis

时间:2018-01-07 07:25:47

标签: .net-core httpclient dotnet-httpclient rest-client

在我的.net核心项目中,我必须调用REST apis向客户端发送一些数据。总有超过9-10个客户端使用不同的api拥有自己的域和自定义标头。如果我每次创建HttpClient对象都会妨碍性能,因为每次创建和关闭新的TCP连接。如果我将使用单例设计模式创建单个HttpClient对象,则将为每个客户端使用相同的基本URL和默认标头。任何人都可以提出解决这个问题的方法。每次新的客户端api进行集成时,我都不想去创建新的HttpClient。

1 个答案:

答案 0 :(得分:2)

如果您正在调用9-10个不同的API,其中客户端级别的内容(如默认标头)可以派上用场,那么9-10个静态HttpClient实例是最佳的。如果编码9-10个实例感觉有点混乱/重复,你可以将它们包装在一个字典对象中,特别是ConcurrentDictionary将有助于保持实例化既懒惰又对线程安全。这样的事情应该有效:

public static class HttpClientManager
{
    private static ConcurrentDictionary<string, HttpClient> _clients = 
        new ConcurrentDictionary<string, HttpClient>();

    public static HttpClient Get(string baseUrl)
    {
        return _clients.GetOrAdd(baseUrl, _ =>
            new HttpClient { BaseAddress = new Uri(baseUrl) });
    }
}

然后只要你需要使用一个就HttpClientManager.Get(baseUrl)