c# - newtonsoft - POSTING JsonObject con HttpClient desde la API web
newtonsoft json serialize vb net (4)
Estoy intentando JsonObject
un JsonObject
usando HttpClient
desde Web API. No estoy muy seguro de cómo hacerlo y no puedo encontrar mucho en el camino del código de muestra.
Esto es lo que tengo hasta ahora:
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("", ???);
Creo que necesito lanzar mi JsonObject
como StreamContent
pero me estoy colgando en ese paso.
Con la nueva versión de HttpClient y sin el paquete WebApi sería:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
var result = client.PostAsync(url, content).Result;
O si lo quieres asincrónico:
var result = await client.PostAsync(url, content);
Dependiendo de su versión de .Net, también podría usar el método HttpClientExtensions.PostAsJsonAsync
.
https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx
La forma más fácil es usar un StringContent
, con la representación JSON de su objeto JSON.
httpClient.Post(
"",
new StringContent(
myObject.ToString(),
Encoding.UTF8,
"application/json"));
Si usa 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");
}
Ejemplo:
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())