簡體   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