POSTing JsonObject с HttpClient из веб-API
Я пытаюсь выполнить POST a JsonObject
с помощью HttpClient
из Web API. Я не совсем уверен, как это сделать и не могу найти много примеров кода кода.
Вот что я до сих пор:
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("", ???);
Думаю, мне нужно отбросить JsonObject
как StreamContent
, но на этом шаге я повесил трубку.
Ответы
Ответ 1
С новой версией HttpClient и без пакета WebApi это будет:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
var result = client.PostAsync(url, content).Result;
Или если вы хотите его асинхронно:
var result = await client.PostAsync(url, content);
Ответ 2
Самый простой способ - использовать StringContent
с представлением JSON вашего объекта JSON.
httpClient.Post(
"",
new StringContent(
myObject.ToString(),
Encoding.UTF8,
"application/json"));
Ответ 3
В зависимости от вашей версии .NET вы также можете использовать метод HttpClientExtensions.PostAsJsonAsync
.
https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx
Ответ 4
При использовании 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");
}
Пример:
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())
Ответ 5
У меня недостаточно репутации, чтобы добавить комментарий к ответу от pomber, поэтому я публикую другой ответ. Используя метод pomber, я продолжал получать ответ "400 Bad Request" от API, к которому я отправлял свой запрос JSON (Visual Studio 2017,.NET 4.6.2). В конечном итоге проблема была связана с неправильным заголовком "Content-Type", созданным функцией StringContent() (см. https://github.com/dotnet/corefx/issues/7864).
ТЛ; др
Используйте правильный ответ с дополнительной строкой, чтобы правильно задать заголовок запроса:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = client.PostAsync(url, content).Result;
Ответ 6
код над ним в vbnet:
dim FeToSend as new (object--> define class)
Dim client As New HttpClient
Dim content = New StringContent(FeToSend.ToString(), Encoding.UTF8,"application/json")
content.Headers.ContentType = New MediaTypeHeaderValue( "application/json" )
Dim risp = client.PostAsync(Chiamata, content).Result
msgbox(risp.tostring)
Надеюсь, это поможет