2017-02-17 4 views
0

Ich mache eine Post-Anfrage an mehrere Server. Diese Server geben alle JSON außer einem zurück. Einer von ihnen gibt Daten wie folgt zurück: 1fe2 80b9 0800 0000 0000 0400 c3ac c2bd.Eine Post-Anfrage in C# führt zu seltsamen Ausgabe

Wenn ich das gleiche mit einem Rest-Client mache, bekomme ich von allen Servern gültige JSON, aber wenn ich es in C# mache, gibt einer der Server diese Art von Daten zurück.

Ich verwende den folgenden Code, dies zu tun:

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

ich auch mit diesem (alten Code) versucht:

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

Ich kann nicht wirklich geben Sie die Server-Urls, weil sie Privatgelände. Jemand eine Ahnung, warum ich diese Daten anstelle von gültigen Json bekomme?

+0

Möglicherweise müssen Sie dem Header Ihrer Anforderung einen Benutzeragenten und einen Host hinzufügen. Kürzlich habe ich mit einem Web-Service gearbeitet, der die Anfrage ohne den richtigen User-Agent nicht bearbeiten konnte. –

+0

Erhalten Sie [Fiddler] (http://www.telerik.com/fiddler) Profiler und sehen Sie, was in beiden Fällen an den Server gesendet wird, und Sie können den Unterschied sehen. – trailmax

+0

In der Tat müssen Sie möglicherweise weitere Header hinzufügen, obwohl ich nicht sicher bin, welche. Eine Liste finden Sie hier: https://www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html –

Antwort

0

HI Bitte installieren Sie das Fiddler-Tool auf Ihrem Computer und überprüfen Sie damit den Anfrage-Header, der vom REST-Client generiert wurde. Und erfassen Sie den Request-Header, der vom .net-Client generiert wurde. Vergleichen Sie dann beide Anforderungsformate, um die Lösung zu finden.

+1

Bitte tun Sie dies im Kommentarbereich. Dies kann nicht als Antwort angesehen werden. – Hemal

Verwandte Themen