我们使用HttpClient
在项目中调用多个域的多个API。我正在创建一个用于所有这些API调用的公共HttpClient
。我对实现这两种方法感到困惑:
HttpClient
创建一个单例类,并通过在get/post/put
方法中传递API URI来将其用于每个调用。HttpClientHandler
创建一个单独的类,该类将在所有HttpClient
之间共享,并通过设置HtppClient
属性为每个域创建一个BaseAddress
。现在我们可以通过传递get/post/put
方法中的相对路径来调用API。哪一种方法更好?
预设BaseAddress
有什么好处吗?如果没有,为什么提供这个属性?
答案 0 :(得分:2)
如果您选择选项1,当然不应使用BaseAddress
,因为您不得不覆盖它,并且您必须避免两个线程在其中一个线程更新之前更新它有机会发送请求。
如果您选择选项2,则可以为每个API配置HttpClient
一次(例如,从配置文件中读取BaseAddress
和Timeout
)。然后可以提供相对的uri,而不必为每个请求添加基址。
我认为哪个更好取决于您是否希望能够为所有API(选项1)或每个API(选项2)配置Timeout
或MaxResponseContentBufferSize
等属性,我不想&# 39;有一个明确的"这个更好"答案。
答案 1 :(得分:0)
选项3如何:每个API(域)调用一个HttpClient实例。它比选项2更容易实现,仍允许您使用一组不同的有状态属性({{ 1}}等,每个API,并仍然最小化周围的开放套接字的数量,避免this infamous problem。这是我的建议。
DefaultRequestHeaders
仅存在,因此您可以为各个请求使用相对URI而不是绝对URI。