2014-02-12 6 views
15

Ich bin dabei, eine C# -Konsolenanwendung zu erstellen, die Text aus einer Textdatei liest, sie in eine JSON-formatierte Zeichenfolge umwandelt (die in einer Zeichenfolgenvariable enthalten ist) POST die JSON-Anfrage an eine Web-API. Ich benutze .NET Framework 4.Erstellen von JSON-Post zu API mit C#

Mein Kampf ist mit der Erstellung der Anfrage und die Antwort bekommen, mit C#. Was ist der grundlegende Code, der notwendig ist? Kommentare im Code wären hilfreich. Was ich bisher habe, ist das Folgende, aber ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin.

//POST JSON REQUEST TO API 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("POST URL GOES HERE?"); 

request.Method = "POST"; 
request.ContentType = "application/json"; 

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
byte[] bytes = encoding.GetBytes(jsonPOSTString); 

request.ContentLength = bytes.Length; 

using (Stream requestStream = request.GetRequestStream()) 
{ 
    // Send the data. 
    requestStream.Write(bytes, 0, bytes.Length); 
} 

//RESPONSE HERE 
+1

Ja, Sie sind auf dem richtigen Weg. –

+0

Funktioniert es? Was ist dann die Frage? – CodeCaster

+0

Ich fragte im Grunde, ob der Code, den ich gepostet habe, korrekt war, um einen POST zu machen, und wegrata hat eine einfachere Lösung gepostet, die für mich funktioniert hat. –

Antwort

48

Haben Sie versucht, die WebClient-Klasse zu verwenden?

Sie sollten in der Lage sein

string result = ""; 
using (var client = new WebClient()) 
{ 
    client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
    result = client.UploadString(url, "POST", json); 
} 
Console.WriteLine(result); 

Dokumentation zu verwenden, bei

http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-us/library/d0d3595k%28v=vs.110%29.aspx

+0

Ich habe mich über die Vorteile des WebClient gewundert. Ich denke, der Unterschied ist deutlich auf dieser Seite dargestellt, nur pure Einfachheit – Coops

+0

Das ist einfach ... so ist der Code innerhalb der 'using' Anweisung im Grunde die JSON-String auf die URL, und dann die Antwort und Zuweisung zu ihm die Ergebniszeichenfolge, die Sie dann mit Console.Writeline ausgeben? –

+0

Ja, der Code innerhalb der Verwendung sendet die Daten, es hat auch UploadData und UploadFile-Methoden, die auf ähnliche Weise wie UploadString funktionieren. Die Antwort wird zurückgegeben und in result platziert und dann an die Konsole ausgegeben – wegrata

0

Von MSDN für Sie;

 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     Console.WriteLine ("Content length is {0}", response.ContentLength); 
     Console.WriteLine ("Content type is {0}", response.ContentType); 

     // Get the stream associated with the response. 
     Stream receiveStream = response.GetResponseStream(); 

     // Pipes the stream to a higher level stream reader with the required encoding format. 
     StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8); 

     Console.WriteLine ("Response stream received."); 
     Console.WriteLine (readStream.ReadToEnd()); 
     response.Close(); 
     readStream.Close(); 

Quelle: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx

+1

* Flüstern * Ich bevorzuge @ Wegrata die Antwort persönlich =) – Coops

3

Versuchen Web-API Httpclient

static async Task RunAsync() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://domain.com/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


      // HTTP POST 
      var obj = new MyObject() { Str = "MyString"}; 
      response = await client.PostAsJsonAsync("POST URL GOES HERE?", obj); 
      if (response.IsSuccessStatusCode) 
      { 
       response.//.. Contains the returned content. 
      } 
     } 
    } 

können Sie weitere Informationen finden Sie hier Web API Clients