2017-02-17 58 views
0

我正在向幾個服務器發送帖子請求。這些服務器返回除一個之外的所有json。其中一人返回如下數據:1fe2 80b9 0800 0000 0000 0400 c3ac c2bd。在C#中發佈帖子請求導致奇怪的輸出

如果我對剩餘的客戶端做同樣的事情,我從所有服務器上得到有效的Json,但是當我在c#中執行時,其中一臺服務器返回那種數據。

我用下面的代碼來做到這一點:

public static string MakeRequest(string url, string requestBody, string methodName) 
     { 
      string result = ""; 
      using (var client = new WebClient()) 
      { 
       client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
       result = client.UploadString(string.Format("{0}{1}", url, methodName), "POST", requestBody); 
      } 
      return result; 
     } 

我也試圖與此(舊代碼):

public static string MakeRequestA(string url, string requestBody, string methodName) 
     { 
      byte[] postBytes  = Encoding.ASCII.GetBytes(requestBody); 

      var request  = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", url, methodName)); 
      request.KeepAlive  = false; 
      request.ProtocolVersion = HttpVersion.Version11; 
      request.Method   = "POST"; 
      request.ContentType  = "application/json"; 
      request.Accept   = "text/plain"; 
      request.ContentLength = postBytes.Length; 

      Stream requestStream = request.GetRequestStream(); 

      requestStream.Write(postBytes, 0, postBytes.Length); 
      requestStream.Close(); 

      WebResponse response = request.GetResponse(); 
      Console.WriteLine (((HttpWebResponse)response).StatusDescription); 

      var dataStream = response.GetResponseStream(); 
      var reader = new StreamReader (dataStream); 
      string responseFromServer = reader.ReadToEnd(); 

      reader.Close(); 
      dataStream.Close(); 
      response.Close(); 
      return responseFromServer; 
     } 

我真的不能給你的服務器URL,因爲它們是私人的。任何人都知道爲什麼我得到這些數據而不是有效的json?

+0

您可能需要將用戶代理和主機添加到請求的標頭中。最近我使用了一個Web服務,如果沒有合適的用戶代理,它將無法處理請求。 –

+0

獲取[Fiddler](http://www.telerik.com/fiddler)分析器並查看兩種情況下發送給服務器的內容,然後您將能夠看到差異。 – trailmax

+0

確實,您可能需要添加更多標題,儘管我不確定它是哪一個。有關列表,請參閱此處:https://www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html –

回答

0

您好,請在您的機器上安裝fiddler工具,並檢查由REST客戶端生成的請求頭。並捕獲由.net客戶端生成的請求頭。然後比較兩種請求格式以找到解決方案

+1

請在評論部分進行此操作。這不能被認爲是答案。 – Hemal