2016-05-19 4 views
0

Guten Morgen alle, Ich habe für eine Weile eine Antwort auf meine Frage gesucht, aber ich habe nichts gefunden. Ich brauche einen REST Aufruf an eine WebAPI zu machen, das ist der Code, den ich mit cURL verwenden:Wie übersetzt man cURL in einer C# -Webrequest?

public string MakeRequest(string parameters) 
    { 
     var request = (HttpWebRequest)WebRequest.Create(EndPoint); 

     request.Method = Method.ToString(); 
     request.ContentLength = 0; 
     request.ContentType = ContentType; 
     request.Headers["X-Mashape-Key"] = "sample"; 
     request.Accept = "application/json"; 

     PostData += "selector=FACE&"; 
     PostData += "url=" +HttpUtility.UrlEncode("http://www.sample.it/sample.jpg"); 
     if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST) 
     { 
      var bytes= Encoding.ASCII.GetBytes(PostData); 
      request.ContentLength = bytes.Length; 

      using (var writeStream = request.GetRequestStream()) 
      { 
       writeStream.Write(bytes, 0, bytes.Length); 
      } 
     } 

     using (var response = (HttpWebResponse)request.GetResponse()) 
     { 
      var responseValue = string.Empty; 

      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode); 
       throw new ApplicationException(message); 
      } 

      // grab the response 
      using (var responseStream = response.GetResponseStream()) 
      { 
       if (responseStream != null) 
        using (var reader = new StreamReader(responseStream)) 
        { 
         responseValue = reader.ReadToEnd(); 
        } 
      } 

      return responseValue; 
     } 
    } 

:

curl -X POST --include 'https://animetrics.p.mashape.com/detect?api_key=sample' \ 
    -H 'X-Mashape-Key: sample' \ 
    -H 'Content-Type: application/x-www-form-urlencoded' \ 
    -H 'Accept: application/json' \ 
    -d 'selector=FACE, EYES, FULL' \ 
    -d 'url=http://example.com/some_image.jpg' 

Ich habe das folgende Stück Code in C# in der Lage zu schreiben Aber als Antwort bekomme ich immer ein JSON-Objekt, das innen sagt:

"{\"errors\":{\"url\":\"url or image field required\"}}" 

Könnte jemand bitte mir etwas Hilfe geben? Danke

UPDATE: Problem gelöst Ich war nur eine endgültige d in der Content-Type Feld fehlt. Danke an alle!

+0

Wo sind 'PostData' und' ContentType' definiert? – Eris

+0

@Eris sie sind in der Klasse definiert, die ich als Parameter erstellt habe. Der Code, den ich gepostet habe, ist eine Methode der Klasse. danke – mik1904

+0

Sie sollten [UrlEncode] (https://msdn.microsoft.com/en-us/library/system.web.htttoptility.urlencode (v = vs.110) .aspx) die Werte der POST-Parameter, wie folgt : 'PostData + =" url = "+ HttpUtility.UrlEncode (" http://example.com/some_image.jpg ");' Wenn dies nicht funktioniert, verwenden Sie [Fiddler] (http://www.telerik.com/fiddler), um genaue Anfragen zu sehen, die mit cUrl und Ihrem Code gemacht wurden, und um die Unterschiede zu finden. – qbik

Antwort

0

UPDATE: Problem gelöst Ich habe gerade ein abschließendes d im Content-Type-Feld fehlt und der Fehler wurde nicht vom Debugger gemeldet. Danke an alle! Michele