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