2017-09-04 137 views
2

我需要在C#中進行一些api調用。我正在使用微軟的Web API Client來做到這一點。我成功地提出了一些POST請求,但我不知道如何將字段「Body」添加到我的請求中。任何想法 ? 這裏是我的代碼:C# - POST請求中的正文內容

static HttpClient client = new HttpClient(); 
    public override void AwakeFromNib() 
    { 
     base.AwakeFromNib(); 
     notif_button.Activated += (sender, e) => { 
     }; 
     tips_button.Activated += (sender, e) => 
     { 
      Tip t1 = new Tip(title_tips.StringValue, pic_tips.StringValue, content_tips.StringValue, "TEST"); 
      client.BaseAddress = new Uri("my_url"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      CreateProductAsync(t1).Wait(); 
     }; 
    } 

    static async Task<Uri> CreateProductAsync(Tip tips) 
    { 
     HttpResponseMessage response = await client.PostAsJsonAsync("api/add_tips", tips); 
     response.EnsureSuccessStatusCode(); 
     return response.Headers.Location; 
    } 
+0

不要添加一個答案你的問題,而是自我回答。 –

回答

2

感謝thisthis,我終於找到解決方案發送帶有標題和正文內容的發佈請求。這裏的代碼:

 var cl = new HttpClient(); 
     cl.BaseAddress = new Uri("< YOUR URL >"); 
     int _TimeoutSec = 90; 
     cl.Timeout = new TimeSpan(0, 0, _TimeoutSec); 
     string _ContentType = "application/x-www-form-urlencoded"; 
     cl.DefaultRequestHeaders.Add(key, value); 
     cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_ContentType)); 
     cl.DefaultRequestHeaders.Add("key", "value"); 
     cl.DefaultRequestHeaders.Add("key", "value"); 
     var _UserAgent = "d-fens HttpClient"; 
     cl.DefaultRequestHeaders.Add("User-Agent", _UserAgent); 

     var nvc = new List<KeyValuePair<string, string>>(); 
     nvc.Add(new KeyValuePair<string, string>("key of content", "value")); 
     var req = new HttpRequestMessage(HttpMethod.Post, "http://www.t-lab.fr:3000/add_tips") { Content = new FormUrlEncodedContent(nvc) }; 
     var res = cl.SendAsync(req); 
+0

List >();可能是一個dicionary var payload = new Dictionary () {「grant_type」,GoogleAuthGrantType}, {「assertion」,googleAuthJwt} }; –

2

步驟1.選擇從HttpContent派生的類型。如果您想用運行時代碼編寫大量內容,可以使用StreamContent並在其上打開某種StreamWriter。簡而言之,請使用StringContent。您還可以派生自己的類來定製內容。

第2步。將呼叫中的內容傳遞給HttpClient.PostAsync

這是一個使用的StringContent通過一些JSON的例子:

string json = JsonConvert.SerializeObject(someObject); 
var httpContent = new StringContent(json, Encoding.UTF8, "application/json"); 
var httpResponse = await httpClient.PostAsync("http://www.foo.bar", httpContent); 

參見How do I set up HttpContent?

+0

Thans爲您解答。我覺得我的理解不好。實際上,我用「提示」替換代碼中的「someObject」,但它仍然不起作用。你能解釋它還是詳細說明它?我需要發佈標題和正文。非常感謝 –