Wysyłanie JsonObject z HttpClient z Web API
Próbuję opublikować JsonObject
używając HttpClient
Z Web API. Nie jestem do końca pewien, jak to zrobić i nie mogę znaleźć wiele w drodze 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("", ???);
[[5]} myślę, że muszę rzucić Moje {[1] } jako StreamContent
, ale jestem zawieszony na tym kroku. 5 answers
Z nową wersją HttpClient i bez pakietu WebApi byłoby to:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
var result = client.PostAsync(url, content).Result;
Or if you want it async:
var result = await client.PostAsync(url, content);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-09 20:46:26
Najprostszym sposobem jest użycie StringContent
, z reprezentacją JSON Twojego obiektu JSON.
httpClient.Post(
"",
new StringContent(
myObject.ToString(),
Encoding.UTF8,
"application/json"));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-03 16:13:14
W zależności od wersji. NET możesz również użyć metody HttpClientExtensions.PostAsJsonAsync
.
Https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-17 13:33:39
Jeśli używasz 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())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-03 02:06:59
Nie mam wystarczającej reputacji, aby dodać komentarz do odpowiedzi od pomber więc zamieszczam kolejną odpowiedź. Korzystając z podejścia pombera otrzymywałem odpowiedź "400 Bad Request" z API, do którego wysyłałem moje żądanie JSON (Visual Studio 2017,. NET 4.6.2). Ostatecznie problem został wytropiony, ponieważ nagłówek" Content-Type " wytwarzany przez StringContent () jest nieprawidłowy (zobacz https://github.com/dotnet/corefx/issues/7864).
Tl;dr
Użyj odpowiedzi pombera z dodatkową linijką aby poprawnie ustawić nagłówek na żądanie:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = client.PostAsync(url, content).Result;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-28 02:54:50