HttpClient.PostAsync方法的行为是处置提供的HttpContent对象。
有很多方法可以解决这种问题,包括为客户端上的每个调用构建一个新的HttpContent
,或者将内容加载到流中并更改指针。
我想知道为什么调用此方法会自动调用其IDisposable
参数的处理?据我所知,这不是.NET中的常见行为
同样值得注意的是,这种行为也在PUT
请求中被观察到,这些行为是幂等的,因此这种行为是为了防止信息再次被发送的前提并不是这样。似乎是对的。
答案 0 :(得分:6)
我无法立即在referencesource上找到实现,但WCF源代码也包含它。您正在寻找的方法是DisposeRequestContent(HttpRequestMessage)
,随附的评论说明了这一点:
请求完成后,
HttpClient
会处理请求内容,因此用户不必这样做。 这也确保了HttpContent
对象仅使用HttpClient
发送一次(类似于HttpRequestMessages
,也只能发送一次)。
HttpContent content = request.Content;
if (content != null)
{
content.Dispose();
}
基本上,它是一种安全措施,可确保您不会发送两次相同的响应,而这些响应是他们认为不良/不常见/不鼓励的用例。