2012-02-19 19 views
2

我已經看了很多Q &的作爲圍繞這個問題,並得到了在那裏我用下面的代碼,以獲得從給定URI的字節數點:現在爲什麼HttpWebResponse嘗試在Content-Encoding爲空時使用GZip解壓縮流?

var request = (HttpWebRequest)WebRequest.Create(uri); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
var response = request.GetResponse(); 
var stream = response.GetResponseStream(); 
if (stream != null) 
{ 
    var buffer = new byte[4097]; 
    var memoryStream = new MemoryStream(); 

    do 
    { 
     var count = stream.Read(buffer, 0, buffer.Length); 
     memoryStream.Write(buffer, 0, count); 

     if (count == 0) 
      break; 
    } while (true); 

    return memoryStream.ToArray(); 
} 

response.Close(); 

return null; 

,一定URI(指向一個文件),當調試時,我發現web響應的'Content-Encoding'標題等於nothing(「」),但是當試圖從流中讀取時,它會拋出一個異常:

System.IO.InvalidDataException:GZip標頭中的幻數不正確。確保你傳入一個GZip流。

當開發工具調試相同的URI我得到這個在響應報頭:

內容編碼:gzip,緊縮

所以,我真的不知道會發生什麼。

有關如何避免此異常併成功讀取文件字節的任何線索和想法?

謝謝!

回答

0

.NET框架將此標題作爲自動解壓縮的一部分進行空白處理。我認爲這是因爲你要求框架自動處理它,並且你得到的響應流不再被壓縮。

我不得不通過檢查源代碼我自己來看這個HttpWebResponse at Microsoft