Próbuję POST użyć JsonObject
przy użyciu HttpClient
interfejsu API sieci Web. Nie jestem do końca pewien, jak sobie z tym poradzić i nie mogę znaleźć wiele na drodze do przykładowego kodu.
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("", ???);
Myślę, że muszę rzucić JsonObject
na siebie, StreamContent
ale jestem zawieszony na tym kroku.
using
podobny sposób, byłem: aspnetmonsters.com/2016/08/2016-08-27-httpclientwrongusing
wokółStringContent
tworzenia chociaż.var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json")
tym musiałem ustawićcontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
. Zobacz odpowiedź poniżej, aby uzyskać więcej informacji.Najłatwiejszym sposobem jest użycie
StringContent
z reprezentacją JSON obiektu JSON.źródło
W zależności od wersji .NET możesz także użyć
HttpClientExtensions.PostAsJsonAsync
metody.https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx
źródło
Jeśli używasz Newtonsoft.Json:
Przykład:
źródło
JsonConvert.SerializeObject
problemy z użyciem DateTimes ISO 8601 Rodzaj: lokalny lub UTC ... hackered.co.uk/articles/…Nie mam wystarczającej reputacji, aby dodać komentarz do odpowiedzi pomber, więc zamieszczam inną odpowiedź. Stosując podejście pomber, ciągle otrzymywałem odpowiedź „400 Bad Request” z interfejsu API, do którego wysyłałem moje zapytanie JSON (Visual Studio 2017, .NET 4.6.2). Ostatecznie problem został przypisany do nieprawidłowego nagłówka „Content-Type” wygenerowanego przez StringContent () (patrz https://github.com/dotnet/corefx/issues/7864 ).
tl; dr
Użyj odpowiedzi pomber z dodatkową linią, aby poprawnie ustawić nagłówek na żądanie:
źródło
"application/json"
wStringContent
konstruktorze prawdopodobnie nie jest wymagane, ponieważ jest jawnie ustawiona na wynikającym zcontent.Headers.ContentType
własności. Nie przetestowałem tego jednak w kodzie.application/json; charset=utf-8
.kod nad nim w vbnet:
Mam nadzieję, że to pomoże
źródło