[英]What is the advantage of setting `BaseAddress` property of `HttpClient`
我们使用HttpClient
在项目中调用多个域的多个API。 我正在创建一个用于所有这些API调用的通用HttpClient
。 我在实现这两种方法之间感到困惑:
HttpClient
创建一个单例类,并通过在get/post/put
方法中传递API URI来将其用于每个调用。 HttpClientHandler
创建一个单例类,它将在所有HttpClient
之间共享,并通过设置BaseAddress
属性为每个域创建一个HtppClient
。 现在我们可以通过传递get/post/put
方法中的相对路径来调用API。 哪一个更好的方法?
预设BaseAddress
有什么好处吗? 如果没有,为什么提供这个属性?
如果你选择选项1,当然不应该使用BaseAddress
,因为你一直在覆盖它,你必须避免两个线程更新它,然后才能有一个机会发送它的请求。
如果选择选项2,则可以为每个API配置一次HttpClient
(例如,从配置文件中读取BaseAddress
和Timeout
)。 然后可以提供相对uri,而无需为每个请求添加基址。
哪个更好我想取决于你是否希望能够为所有API(选项1)或每个API(选项2)配置Timeout
或MaxResponseContentBufferSize
等属性,我没有明确的“这个更好”的答案。
如何选择3: 每个API(域)调用一个HttpClient实例。 它比选项2更容易实现,仍允许您为每个API使用一组不同的有状态属性( DefaultRequestHeaders
等),并且仍然最小化周围的开放套接字的数量,从而避免这个臭名昭着的问题 。 这是我的建议。
BaseAddress
仅存在,因此您可以为各个请求使用相对URI而不是绝对URI。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.