2011-05-24 13 views
136

Próbuję POST z przy użyciu HttpClient z Web API. Nie jestem do końca pewien, jak to zrobić i nie mogę znaleźć wiele na temat kodu przykładowego.OGŁASZANIE JsonObject Za pomocą HttpClient z interfejsu Web API

Oto co mam do tej pory:

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("", ???); 

Chyba muszę oddać mój JsonObject jako StreamContent ale jestem coraz zawiesił się na tym etapie.

Odpowiedz

148

Dzięki nowej wersji HttpClient i bez pakietu WebAPI byłoby:

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

lub jeśli chcesz to ASYNC:

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

Ten przeciążony konstruktor StringContent zrobił dla mnie sztuczkę. –

149

Najprostszym sposobem jest użycie StringContent, z reprezentacją JSON obiektu JSON.

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

Zwróć uwagę na rodzaj zawartości. Opuściłem to i kazałem mi debugować o wiele dłużej, niż bym chciał. – Zapnologica

35

W zależności od wersji .Net można również użyć metody HttpClientExtensions.PostAsJsonAsync.

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

+2

Teraz znaleźć w Microsoft.AspNet.Client.WebApi nuget – jle

+1

Właśnie zainstalowałem go z Microsoft.AspNet.WebApi.Client –

+0

To rozwiązało mój problem. Robiłem błąd (przez długi czas), przechodząc przez klasę C#, która zawierała pewne właściwości, które były listami za pomocą klienta.PostAsync, client.SendAsync .. Otrzymywałem bardzo różne wyniki. Jeśli tablica była pusta, to moje rozwiązanie API mogłoby ją odebrać, ale jeśli tablica miała element, metoda kontrolera nie była w stanie modelować wiązania JSON. Dzięki za to .. Wydaje mi się, że PostAsJsonAsync bardziej niezawodnie przekształca złożony obiekt C# w JSON. –

17

przypadku korzystania Newtonsoft.Json :

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"); 
} 

Przykład:

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

nie jest to rdzeń asp.net core, jego ogólny poziom aż do 4.5.6 – danatcofo

+0

'Problemy JsonConvert.SerializeObject' przy użyciu *** DateTimes ISO 8601 *** Rodzaj: Lokalny lub UTC ... http: // www. hackered.co.uk/articles/useful-c-extensions-for-working- with-iso-8601-dates-and-strings – Kiquenet

Powiązane problemy