Dot-Net

為什麼 HttpClient.PostAsync 和 PutAsync 處理內容?

  • August 25, 2014

HttpClient.PostAsync方法的行為是處置提供的HttpContent對象。

有很多方法可以繞過這種行為,包括HttpContent為客戶端上的每個呼叫構造一個新的,或者將內容載入到流中並更改指針。

我想知道為什麼呼叫此方法會自動呼叫其IDisposable參數的處置?據我所知,這不是 .NET 中的常見行為

還值得注意的是,這種行為在PUT請求中也有觀察到,它是冪等的,所以這種行為是為了防止資訊再次發送的前提似乎並不正確。

我無法立即在 referencesource 上找到實現,但 WCF 源也包含它。您正在尋找的方法是DisposeRequestContent(HttpRequestMessage),隨附的評論說:

當請求完成時,HttpClient釋放請求內容,這樣使用者就不必這樣做了。這也確保了一個對HttpContent像只發送一次使用HttpClient(類似於HttpRequestMessages也可以只發送一次)。

HttpContent content = request.Content;
if (content != null)
{
   content.Dispose();
}

基本上,這是一種保障措施,以確保您不會兩次發送相同的響應,因為他們認為這是一個糟糕/不常見/不鼓勵的案例。

引用自:https://stackoverflow.com/questions/25495394