4

У меня есть ответ сервера с Transfer-Encoding: фрагментированногоTransfer-Encoding: фрагментированный в 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 

Смотрите, что размер c7 куска, прежде чем данные JSON.

Как я могу прочитать поток сырого ответа без кусков в Windows Phone с помощью HttpWebResponse?


Подсказка: для того, чтобы сделать вывод отключенного вывода, я просто должен указать версию протокола HTTP/1.0. Но я не знаю, как это сделать, поскольку нет ProtocolVersion собственности в HttpWebRequest классе в Windows Phone или Silverlight

+0

Вы решили это? У меня также есть проблемы с протоколом HTTP для Windows Phone ... –

+1

Я добавил свой собственный ответ. Пожалуйста, проверь это. Я использую HttpClient сейчас –

ответ

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

Используйте 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; 
    }