2017-09-04 1 views
2

Ich muss einige API-Anrufe in C# machen. Ich verwende Web API Client von Microsoft, um das zu tun. Ich habe Erfolg, einige POST-Anfragen zu machen, aber ich weiß nicht, wie ich das Feld "Body" in meine Anfragen einfügen soll. Irgendeine Idee ? Hier ist mein Code:C# - Körper Inhalt in POST Anfrage

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

Fügen Sie keine Antwort zu Ihrer Frage, posten Sie stattdessen eine Selbstantwort. –

Antwort

2

Dank this und this habe ich endlich die Lösung gefunden, Post-Anfragen mit Kopfzeilen UND Body-Inhalt zu senden. Hier ist der Code:

 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

Liste >(); könnte ein dicionary var sein payload = new Dictionary () { {"grant_type", GoogleAuthGrantType}, {"assertion", googleAuthJwt} }; –

2

Schritt 1. Wählen Sie ein Typ, der von HttpContent ableitet. Wenn Sie viel Inhalt mit Laufzeitcode schreiben möchten, können Sie eine StreamContent verwenden und eine Art StreamWriter darauf öffnen. Für etwas Kurzes verwenden Sie StringContent. Sie können auch eine eigene Klasse für benutzerdefinierten Inhalt ableiten.

Schritt 2. Übergeben Sie den Inhalt in einem Anruf an HttpClient.PostAsync.

Hier ist ein Beispiel, das StringContent verwendet einige JSON weitergeben müssen:

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

Siehe auch How do I set up HttpContent?.

+0

Thans für deine Antwort. Ich glaube, ich habe es nicht gut verstanden. Tatsächlich ersetze ich in Ihrem Code "someObject" durch "tips", funktioniert aber immer noch nicht. Kannst du es erklären oder näher erläutern? Ich muss Header und Körper posten. Vielen Dank –

Verwandte Themen