繁体   English   中英

设置`HttpClient`的`BaseAddress`属性有什么好处

[英]What is the advantage of setting `BaseAddress` property of `HttpClient`

我们使用HttpClient在项目中调用多个域的多个API。 我正在创建一个用于所有这些API调用的通用HttpClient 我在实现这两种方法之间感到困惑:

  1. HttpClient创建一个单例类,并通过在get/post/put方法中传递API URI来将其用于每个调用。
  2. HttpClientHandler创建一个单例类,它将在所有HttpClient之间共享,并通过设置BaseAddress属性为每个域创建一个HtppClient 现在我们可以通过传递get/post/put方法中的相对路径来调用API。

哪一个更好的方法?

预设BaseAddress有什么好处吗? 如果没有,为什么提供这个属性?

如果你选择选项1,当然不应该使用BaseAddress ,因为你一直在覆盖它,你必须避免两个线程更新它,然后才能有一个机会发送它的请求。

如果选择选项2,则可以为每个API配置一次HttpClient (例如,从配置文件中读取BaseAddressTimeout )。 然后可以提供相对uri,而无需为每个请求添加基址。

哪个更好我想取决于你是否希望能够为所有API(选项1)或每个API(选项2)配置TimeoutMaxResponseContentBufferSize等属性,我没有明确的“这个更好”的答案。

如何选择3: 每个API(域)调用一个HttpClient实例。 它比选项2更容易实现,仍允许您为每个API使用一组不同的有状态属性( DefaultRequestHeaders等),并且仍然最小化周围的开放套接字的数量,从而避免这个臭名昭着的问题 这是我的建议。

BaseAddress仅存在,因此您可以为各个请求使用相对URI而不是绝对URI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM