2011-05-24 23 views
136

Web API'sındanPOST a HttpClient kullanarak çalışıyorum. Bu konuda nasıl gideceğimi tam olarak bilmiyorum ve örnek kodun yolunda çok şey bulamıyorum.Web API'sından HttpClient'le POSTING JsonObject

var myObject = (dynamic)new JsonObject(); 
myObject.Data = "some data"; 
myObject.Data2 = "some more data"; 

HttpClient httpClient = new HttpClient("myurl"); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = httpClient.Post("", ???); 

Ben benim JsonObjectStreamContent bir şekilde döküm gerekir ama bu adımda takıldığım düşünüyorum:

İşte ben bugüne kadar ne var.

cevap

148

HttpClient ve WebAPI paketi olmadan olurdu:

var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); 
var result = client.PostAsync(url, content).Result; 

Yoksa o zaman uyumsuz isterseniz:

var result = await client.PostAsync(url, content); 
+0

Bu aşırı StringContent yapıcısı benim için hile yaptı. –

149

En kolay yol, JSON nesnesinin JSON gösterimi ile StringContent kullanmaktır.

httpClient.Post(
    "", 
    new StringContent(
     myObject.ToString(), 
     Encoding.UTF8, 
     "application/json")); 
+8

İçerik türüne dikkat edin. Onu bıraktım ve istediğimden çok daha uzun süre hata ayıklamadım. – Zapnologica

35

sizin Net sürümüne bağlı da HttpClientExtensions.PostAsJsonAsync yöntemi kullanabilirsiniz. yeni sürümü ile

https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx

+2

Microsoft.AspNet.Client.WebApi nuget – jle

+1

içinde bulundu Şimdi Microsoft.AspNet.WebApi.Client –

+0

dan yükledim Bu benim sorunumu çözdü. Ben client.PostAsync, client.SendAsync kullanarak Listeler bazı özellikleri içeren bir C# sınıfı geçerken (uzun) etrafında karışıklık yapıyordum .. Çok karışık sonuçlar elde ediyordum. Dizi boşsa API çözümüm onu ​​alırdı, ancak dizi bir öğeye sahipse, denetleyici yöntemi JSON'u bağlama modelini oluşturamadı. Bunun için teşekkürler ... PostAsJsonAsync'in daha güvenli bir şekilde C# nesnesini JSON'a dönüştürdüğünü görüyorum. –

17

Newtonsoft.Json kullanılıyorsa :

using Newtonsoft.Json; 
using System.Net.Http; 
using System.Text; 

public static class Extensions 
{ 
public static StringContent AsJson(this object o) 
    => new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json"); 
} 

Örnek:

var httpClient = new HttpClient(); 
var url = "https://www.duolingo.com/2016-04-13/login?fields="; 
var data = new { identifier = "username", password = "password" }; 
var result = await httpClient.PostAsync(url, data.AsJson()) 
+0

Bu asp.net çekirdek özgü değil, aslında 4.0.6 – danatcofo

+0

'JsonConvert.SerializeObject' sorunları için aşağı genel jenerik *** DateTimes ISO 8601 kullanarak *** Tür: Yerel veya UTC ... http: // www. hackered.co.uk/articles/useful-c-extensions-for-working-with-iso-8601-dates-and-strings – Kiquenet

İlgili konular