4

我有傳輸編碼的服務器響應分塊:分塊傳輸編碼:在Windows Phone的

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讀取沒有塊的原始響應流?


提示:要使sever禁用分塊輸出,我只需指定HTTP/1.0協議版本。但我不知道該怎麼做,因爲沒有ProtocolVersion財產HttpWebRequest類的Windows Phone或Silverlight

+0

你解決了嗎?我也遇到了Windows Phone的HTTP協議問題... – 2014-07-18 14:35:34

+1

我已經添加了我自己的答案。請檢查一下。我現在使用HttpClient – 2014-08-14 09:51:50

回答

1

HttpClient能夠解析自動分塊輸出 http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx

HttpClient是PostAsync和GetAsinc以及其他一些優點的總體很酷的東西。 我永遠不會再使用HttpWebRequest。

HttpClient是在.NET框架4.5,Windows 8或Windows手機一應俱全8.1

使用NuGet包http://www.nuget.org/packages/Microsoft.Net.Http如果你需要的HttpClient在 - .NET Framework 4的 - 的Windows Phone的Silverlight 7.5 - Silverlight 4中 - 便攜式類庫

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; 
    }