5

我有一个带有 Transfer-Encoding: chunked 的服务器响应

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Mon, 18 Feb 2013 08:22:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding

c7
{<some json data>}
0

查看 json 数据之前的 c7 块大小。

如何使用 Windows Phone 读取没有块的原始响应流HttpWebResponse


提示:要使服务器禁用分块输出,我只需要指定 HTTP/1.0 协议版本。但我不知道该怎么做,因为Windows Phone 或 SilverlightProtocolVersion中的类中没有属性HttpWebRequest

4

2 回答 2

1

HttpClient能够自动解析分块输出 http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx

HttpClient使用 PostAsync 和 GetAsinc 以及许多其他优点,整体来说是一件很酷的事情。我再也没有使用过 HttpWebRequest。

HttpClient在 .NET Framework 4.5、Windows 8 或 Windows Phone 8.1 中随时可用

如果您在 - .NET Framework 4 - Windows Phone Silverlight 7.5 - Silverlight 4 - 可移植类库中需要 HttpClient,请使用 NuGet 包http://www.nuget.org/packages/Microsoft.Net.Http

于 2014-08-14T09:51:03.017 回答
0

您可以通过以下方式读取分块响应:

public static byte[] ReadChunkedResponse(this WebResponse response)
    {
        byte[] buffer;

        using (var stream = response.GetResponseStream())
        {
            using (var streamReader = new StreamReader(stream, Encoding.UTF8))
            {
                var content = new StringBuilder();
                while (!streamReader.EndOfStream)
                {
                    content.Append((char)streamReader.Read());
                }

                buffer = Encoding.UTF8.GetBytes(content.ToString());
            }
        }

        return buffer;
    }
于 2013-06-06T12:21:51.937 回答