我对优化调用REST API的客户端的行为感兴趣。在此API中,特定的POST操作允许包含If-None-Match: *
标头,如果正在上载的项目已存在于系统中,则会导致服务器报告HTTP 412响应。当与Expect: 100-continue
一起使用时,服务器将使用发送100响应的412 而不是进行响应,如RFC 2616 §8.2.3中所述。我想在客户端检测到这种情况,并避免在这种情况下传输请求的主体。
直接使用HttpWebRequest
时,实现起来非常简单。在调用GetRequestStream
(或GetRequestStreamAsync
)之后,但在将数据写入生成的Stream
之前,代码只需要检查HaveResponse
属性。如果值为true
,请关闭请求流并继续致电GetResponseAsync
。
现在我正在转换使用HttpClient
而不是直接使用HttpWebRequest
(以改善跨多个平台的支持)。目前我使用StreamContent
来表示请求的主体,并观察流的内容是否发送,无论服务器是否发送了100或412响应。如何使用HttpClient
和HttpRequestMessage
代替HttpWebRequest
执行与上述类似的优化?