The behavior of the HttpClient.PostAsync method is to dispose of the provided HttpContent object.
There are many ways to get around this behavior including construct
I couldn't immediately find the implementation on referencesource but the WCF source contains it as well. The method you're looking for is DisposeRequestContent(HttpRequestMessage) and the accompanying comment says this:
When a request completes,
HttpClient
disposes the request content so the user doesn't have to. This also ensures that aHttpContent
object is only sent once usingHttpClient
(similar toHttpRequestMessages
that can also be sent only once).
HttpContent content = request.Content;
if (content != null)
{
content.Dispose();
}
Basically it's a safeguard to make sure you don't send the same response twice which they consider a bad/uncommon/discouraged use case.