2014-02-12 26 views
15

我正在創建一個C#控制檯應用程序,它從文本文件中讀取文本,將其轉換爲JSON格式的字符串(保存在字符串變量中),並且需要將JSON請求發佈到Web API。我正在使用.NET Framework 4.我的努力是使用C#創建請求並獲取響應。 什麼是必要的基本代碼?代碼中的註釋會很有幫助。到目前爲止我所得到的是下面的內容,但我不確定我是否在正確的軌道上。如何使用C#創建JSON發佈到api

//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

是的,你是在正確的軌道上。 –

+0

它工作嗎?那麼問題是什麼? – CodeCaster

+0

我基本上是問我發佈的代碼是否正確,是做POST,wegrata發佈了一個更簡單的解決方案。 –

回答

48

您是否嘗試過使用WebClient類?

,你應該能夠使用

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

文檔在

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

我確實懷疑過WebClient的好處。我認爲這個區別很清楚地顯示在這個頁面上,只是很簡單 – Coops

+0

這很簡單...所以'using'語句中的代碼基本上將json字符串發佈到url,然後獲取響應並將其分配給結果字符串,然後使用Console.Writeline輸出? –

+0

是使用內部的代碼發佈數據,它也有UploadData和UploadFile方法,其功能與UploadString類似。並將響應返回並放入結果中,然後轉儲到控制檯 – wegrata

0

從MSDN你;

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

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

+1

*耳語*我更喜歡@ wegrata的回答親自=) – Coops

3

嘗試使用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. 
      } 
     } 
    } 

你可以找到更多的細節在這裏Web API Clients