it-swarm.com.de

POSTing von JsonObject mit HttpClient über die Web-API

Ich versuche, eine JsonObject mit HttpClient von der Web-API zu POST. Ich bin mir nicht ganz sicher, wie ich das anstellen soll, und ich kann nicht viel an Beispielcode finden. 

Folgendes habe ich bisher:

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

Ich denke, ich muss meine JsonObject als StreamContent umsetzen, aber ich stehe auf diesem Schritt. 

187
Mark

Mit der neuen Version von HttpClient und ohne das WebApi-Paket wäre dies:

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

Oder wenn Sie es async wollen:

var result = await client.PostAsync(url, content);
275
pomber

Am einfachsten ist es, eine StringContent mit der JSON-Darstellung Ihres JSON-Objekts zu verwenden.

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

Abhängig von Ihrer .NET-Version können Sie auch die HttpClientExtensions.PostAsJsonAsync-Methode verwenden.

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

47
user3285954

Wenn Sie Newtonsoft.Json verwenden:

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

Beispiel:

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())
31

Ich habe nicht genug Ruf, um einen Kommentar zur Antwort von Pomber hinzuzufügen, deshalb poste ich eine weitere Antwort. Mit dem Ansatz von pomber erhielt ich weiterhin eine Antwort "400 Bad Request" von einer API, in die ich meine JSON-Anforderung gepostet hatte (Visual Studio 2017, .NET 4.6.2). Schließlich wurde das Problem darauf zurückgeführt, dass der von StringContent () erzeugte "Content-Type" -Header nicht korrekt war (siehe https://github.com/dotnet/corefx/issues/7864 ).

tl; dr

Verwenden Sie die Antwort von Pomber mit einer zusätzlichen Zeile, um den Header für die Anforderung korrekt festzulegen:

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

der Code darüber in 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)

Ich hoffe das hilft

0