C# - 从 HttpWebResponse 接收奇怪的字符

Joe*_*ore 5 c# serialization json

我有这个代码来发送一个 HTTP 请求:

public string MakeRequest(string requestUrl, object data)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
    request.ContentType = "application/json";
    request.KeepAlive = false;
    request.Headers.Add("Authorization", "BEARER " + apiToken);
    System.Net.ServicePointManager.Expect100Continue = false;

    if (data != null)
    {
        request.Method = "POST";
        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            string json = new JavaScriptSerializer().Serialize(data);

            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();
        }
    }
    else
        request.Method = "GET";

    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
            throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription));

        string Charset = response.CharacterSet;
        Encoding encoding = Encoding.GetEncoding(Charset);
        StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);

        return reader.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于大多数呼叫,但POST在我收到此响应的情况下:

"?\b\0\0\0\0\0\0?V?M,.I-?/JI-R??V3<S????L?L,?L??jk[???&\0\0\0"
Run Code Online (Sandbox Code Playgroud)

当我看到 Fiddler 捕获的呼叫时,它说收到的例程:

{
  "MasterOrder": {
    "OrderId": "65250824"
  }
}
Run Code Online (Sandbox Code Playgroud)

那么,究竟发生了什么?Fiddler 如何看到一个响应而应用程序看到另一个响应?

Joe*_*ore 6

通过将这些行添加到以下内容解决了该问题request

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
Run Code Online (Sandbox Code Playgroud)