2017-08-24 131 views
0

我想知道如何從json發佈帖子到http服務器。 我用做JSON的代碼如下:如何發佈json到HTTP服務器

pedro product = new pedro(); 
        product.FirtsName = "Ola"; 
        product.ID = 1; 
        product.idade= 10; 


        string json = JsonConvert.SerializeObject(product); 

這是pedro類:

public class pedro 
    { 
     public int ID { get; set; } 
     public string FirtsName { get; set; } 
     public int idade { get; set; } 
    } 
+0

您可以使用[RestSharp](http://restsharp.org/) –

+1

[如何將JSON發佈到服務器?](https://stackoverflow.com/questions/9145667/how-to-後json到服務器) –

+0

將JSON轉換爲字符串,然後base64字符串,然後您需要base64解碼服務器上的數據並將其轉換回對象....它的聲音比它更復雜並且每一端只需要兩個函數調用。 – SPlatten

回答

0

用的WebAPI,你可以使用這樣的事情:

string url = "http://url.of.server/"; 
Pedro product = new Pedro(); 
product.FirtsName = "Ola"; 
product.ID = 1; 
product.Idade = 10; 

using (var client = new HttpClient()) 
{ 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     HttpResponseMessage response = client.PostAsJsonAsync(url, product).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      // do something 
     } 
} 

如果您不使用WepApi,有許多類似的方法,例如:https://stackoverflow.com/a/39414248/7489072

除非您絕對必須/想要發佈二進制文件並控制接收Web服務器,否則不要Base64對帖子正文進行編碼,如註釋中所示。在99%的案例中,Web服務器期望一個純文本體。 如果您需要發佈ASCII範圍以外的字符,請使用正確的HTTP標頭指定Unicode正文加載。

更新1(頭): HttpClient的類具有可以用來設定共同請求報頭,如AcceptEncoding屬性DefaultRequestHeaders。如果你需要的內容頭的更爲精細的控制,在.PostAsJsonAsync代替使用.PostAsync(字符串URI,HttpContent內容)(即只設置JSON的內容了一些默認的標題)

using (var client = new HttpClient()) 
{ 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     string stringFromObject = JsonConvert.SerializeObject(product); 
     HttpContent content = new StringContent(stringFromObject, Encoding.UTF8, "application/json"); 
     content.Headers.Add("YourCustomHeader", "YourParameter"); 

     HttpResponseMessage response = client.PostAsync(url, content).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      // do something 
     } 
} 

更新2(編碼): 詳細說明編碼註釋:當然,你應該避免引號和類似的。但這是Json標準的一部分,應該由普通的編碼器/解碼器來處理。最重要的是,您可以對序列化對象的屬性使用任何進一步的編碼。例如字符串上的HTML編碼和二進制屬性上的Base64。只要你知道接收它的網絡服務器會正​​確解碼它。

{ 
    "id": 3, 
    "title": "Decode this", 
    "description": "this is < HTML encoded >", 
    "profileImgBase64": "Nzg5MzQ4IHdleWhmQVMmKihFJiphc3R5WUdkdCphc14qVHlpZg0K" 
} 

所以編碼單獨的屬性,但不編碼整個的Json有效載荷,因爲你必須把它在接收管道的開始解碼,它只是不是Web服務器就明白了。

+0

如何在代碼中添加標題? –

+0

HttpClient.DefaultRequestHeaders爲最常見的請求標頭提供了許多預定義的屬性。例如。 HttpClient.DefaultRequestHeaders.AcceptEncoding 如果您需要設置多個唯一的請求標頭,請使用.PostAsync(string uri,HttpContent內容)並設置內容的標頭。 –

+0

你能用一個頭文件來更新你的答案嗎? –

相關問題