【发布时间】:2016-02-15 12:40:23
【问题描述】:
我正在尝试使用HttpClient 获取数据流,但HttpResponseMessage 发生了一些奇怪的事情,我回来了。
我发送请求的方式是这样的:
_webClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, _webClient.BaseAddress + connectionSuffix), HttpCompletionOption.ResponseHeadersRead);
但是响应的 ContentHeaders 并没有像我期望的那样填充。这是一个示例:响应包含 Content-Type 标头,但在 ContentType 字段中找不到它的值,只能在通用 Headers 可数。
在 Wireshark 中分析数据包流给了我以下信息:
GET /video.cgi HTTP/1.1 授权:基本 YWRtaW46 主机:192.168.0.150 连接:保持活动状态
回答:
HTTP/1.0 200 正常 服务器:Camera Web Server/1.0 作者:史蒂文·吴 MIME 版本:1.0 缓存控制:无缓存 Content-Type: multipart/x-mixed-replace;boundary=--视频边界--
这不是世界末日,我在边界参数之后,我可以在通用 Headers 字段中找到它。但我不禁想知道:这是预期的行为吗?我似乎找不到任何关于 Getting 标头的信息,只有关于如何将它们添加到请求中(这是另一回事)
【问题讨论】:
-
能否请您使用 fiddler2 之类的工具检查响应?
-
@OguzOzgul 我已经通过 Wireshark 检查了响应。设备发送正确的响应。我已将其包含在原始问题中。
-
这很有趣,我认为 CompletionOption 在这里发挥了作用。为什么不在 connect.microsoft.com 上问这个问题?
-
可能在完全接收到 http 响应标头之后立即调用此回调,同时将其填充到字典中,但在将其处理为 ContentType 或其他属性之前。有趣的是,通用列表只有内容类型,而其他标头也已收到
-
@OguzOzgul 关于其他标题。这是预期的行为。响应消息具有响应标头和内容标头。 Cache-Control、MIME-version 等是响应头,而 Content-Type 是内容头。这也让我相信,在处理之前访问字段不会出现这个问题,因为响应头被归档到正确的字段中,只是内容头没有放在相应的字段中。
标签: c# http-headers httpclient