看起来问题出在API本身。尽管你没有告诉它你接受GZipped的内容,但它无论如何都是GZipped,显然Fiddler会处理这个问题并为你解压。在你的应用程序中,你必须通过解压缩内容来处理这个问题。以下是如何做到这一点的一个简单示例:
var wc = new WebClient();
var bytes = wc.DownloadData(new Uri(@"http://api.stackoverflow.com/1.1/questions"));
string responseText;
using (var outputStream = new MemoryStream())
{
using (var memoryStream = new MemoryStream(bytes))
{
using (var gzip = new GZipStream(memoryStream, CompressionMode.Decompress))
{
byte[] buffer = new byte[1024];
int numBytes;
while ((numBytes = gzip.Read(buffer, 0, buffer.Length)) > 0)
{
outputStream.Write(buffer, 0, numBytes);
}
}
responseText = Encoding.UTF8.GetString(outputStream.ToArray());
}
}
Console.WriteLine(responseText);
不管它是否总是GZipped,谁知道呢?你可以检查Content Encoding HTTP头,看看它是否
gzip
,如果是,则运行此代码;如果不是,则可以将字节直接转换为文本。