C# - 从HttpWebResponse

时间:2016-11-04 01:31:14

标签: c# json serialization

我有这个代码来发送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();
    }
}

它适用于大多数通话,但只有一个POST我收到此作为回复:

"�\b\0\0\0\0\0\0�V�M,.I-�/JI-R��V3<S����L�L,�L��jk[���&\0\0\0"

当我看到Fiddler捕获的电话时,它说收到了例行程序:

{
  "MasterOrder": {
    "OrderId": "65250824"
  }
}

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

1 个答案:

答案 0 :(得分:2)

通过将这些行添加到request

解决了这个问题
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;