2016-11-04 1 views
1

から奇妙な文字を受け、私はHTTPリクエストを送信するには、このコードを持っている:C#の - HttpWebResponseの

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(); 
    } 
} 

それは、ほとんどの通話に適していますが、1つ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" 
    } 
} 

したがって、正確に何が起きていますか?そのフィドラーはどのように1つの応答を見て、アプリケーションは別の応答を見ますか?

+1

私は理由は分からないが、あなたは間違ったエンコーディング – Daniel

+0

試して使用してクリアされます: '"アプリケーション/ jsonの;のcharset = UTF-8を";' – Jim

答えて

0

requestにこれらの行を追加することで問題を解決:

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
関連する問題