[英]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.