C# 我应该为每个函数使用HttpClient还是为整个应用程序使用一个?

C# 我应该为每个函数使用HttpClient还是为整个应用程序使用一个?,c#,.net,web-services,httpclient,C#,.net,Web Services,Httpclient,我正在为一些REST类型的API创建.NET包装器。 我使用HttpClient进行通信(发送/接收Json)。 有许多异步方法 验证是通过cookie进行的,我正在接收并存储在cookiecontainer中。 我应该为每个函数使用单独的httpclient还是一个全局httpclient? 如果每个函数都有一个单独的名称,那么共享附加到每个请求的cookiecontainer和自定义头的最佳方法是什么?在语句中,每个函数都有一个明确的名称。自定义头可以存储在静态变量中,只要它们只是从中读取。

我正在为一些REST类型的API创建.NET包装器。 我使用HttpClient进行通信(发送/接收Json)。 有许多异步方法

验证是通过cookie进行的,我正在接收并存储在cookiecontainer中。 我应该为每个函数使用单独的httpclient还是一个全局httpclient?
如果每个函数都有一个单独的名称,那么共享附加到每个请求的cookiecontainer和自定义头的最佳方法是什么?

语句中,每个函数都有一个明确的名称。自定义头可以存储在静态变量中,只要它们只是从中读取。使用任何实例成员时,cookie容器可能需要锁定。

每个函数都必须使用
语句。自定义头可以存储在静态变量中,只要它们只是从中读取。cookie容器在处理任何实例成员时都可能需要锁定。

我建议将数字与您调用的API保持一致(我就是这样编码的),这意味着如果您调用Twitter API,只需保留一个HttpClient实例即可,如果您同时访问Facebook API,留一个吧


请记住,在创建HttpClient(例如DefaultRequestHeaders)后,某些元数据无法更改,这是有意义的,因为HttpClient可以重复使用以进行多次调用(例如,易于cookie或身份验证信息共享)。

我建议保持与正在调用的API的编号相同(这是我编写我的代码的方式),这意味着,如果您正在调用Twitter API,只需保留一个HttpClient实例即可,如果您同时访问Facebook API,则保留另一个实例即可


请记住,在创建HttpClient(例如DefaultRequestHeaders)后,某些元数据无法更改,这是有意义的,因为HttpClient旨在重复使用以进行多次调用(例如,方便cookie或身份验证信息共享)。

因此,在每个使用块中,我都需要创建头并攻击cookie?或者我应该创建一个“工厂”函数来创建WebClient的新实例,并自动将cookie添加到cookie容器和标题中?如果我想在所有HttpClient之间共享所有Cookie怎么办?一个可以自动创建带有默认头的HttpClient的工厂函数似乎是一个很好的方法。关于共享cookie容器,它可能很棘手,我不能确定它应该如何实现。我确实发现了这个问题,但它与我之前所说的基本一致:我对这个答案不太确定,读一下我听到的与ioSamurai相同的内容,最好每个应用程序有一个HttpClient,或者“每个应用程序都有一个服务”。。。请参阅此处的更多讨论:另外,官方文档说“HttpClient打算实例化一次,并在应用程序的整个生命周期中重复使用”,所以在每个使用块中,我都需要创建标头和攻击cookie?或者我应该创建一个“工厂”函数来创建WebClient的新实例,并自动将cookie添加到cookie容器和标题中?如果我想在所有HttpClient之间共享所有Cookie怎么办?一个可以自动创建带有默认头的HttpClient的工厂函数似乎是一个很好的方法。关于共享cookie容器,它可能很棘手,我不能确定它应该如何实现。我确实发现了这个问题,但它与我之前所说的基本一致:我对这个答案不太确定,读一下我听到的与ioSamurai相同的内容,最好每个应用程序有一个HttpClient,或者“每个应用程序都有一个服务”。。。请参阅此处的更多讨论:加上官方文档说“HttpClient打算实例化一次,并在应用程序的整个生命周期中重复使用”,所以您建议对HttpClient使用单音模式?是否有staic方法始终返回对HttpClient的引用?那么,每个API有一个客户机?我仍然不确定这是否是正确的选择。其他人建议每个操作有一个httpClient,并有一个httpClient工厂。我必须研究每个应用程序有一个实例的缺点。@Hooch,Singleton意味着整个应用程序只有一个HttpClient实例。如果您正在访问各种不同的API,那么为每个API保留一个HttpClient实例就更方便了。只有在不经常使用的情况下,我才会为每个函数设置
。如果您使用HttpClient访问后端数据库,那么反复创建相同的内容是没有意义的,但是如果您只是在运行cron作业,那么只需按函数创建它。那么您建议对HttpClient使用单音模式吗?是否有staic方法始终返回对HttpClient的引用?那么,每个API有一个客户机?我仍然不确定这是否是正确的选择。其他人建议每个操作有一个httpClient,并有一个httpClient工厂。我必须研究每个应用程序有一个实例的缺点。@Hooch,Singleton意味着整个应用程序只有一个HttpClient实例。如果您正在访问各种不同的API,那么为每个API保留一个HttpClient实例就更方便了。只有在不经常使用的情况下,我才会为每个函数设置
。如果您使用HttpClient访问后端数据库,那么反复创建相同的内容是没有意义的,但是如果您只是在运行一个cron作业,那么只需按函数创建。