Ich versuche, eine JsonObject
Verwendung HttpClient
von der Web-API zu POSTEN. Ich bin mir nicht ganz sicher, wie ich das anstellen soll, und 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
besetzen, aber ich werde auf diesen Schritt aufgehängt.
c#
asp.net
wcf
asp.net-web-api
wcf-web-api
Kennzeichen
quelle
quelle
using
wie ich es war: aspnetmonsters.com/2016/08/2016-08-27-httpclientwrongusing
dieStringContent
Kreation allerdings umgangen.var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json")
ich einstellencontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
. Siehe Antwort unten für weitere Details.Am einfachsten ist es, a
StringContent
mit der JSON-Darstellung Ihres JSON-Objekts zu verwenden.quelle
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
quelle
Bei Verwendung von Newtonsoft.Json:
Beispiel:
quelle
JsonConvert.SerializeObject
Probleme mit DateTimes ISO 8601 Art: Lokal oder UTC ... hackered.co.uk/articles/…Ich habe nicht genug Ruf, um einen Kommentar zur Antwort von pomber hinzuzufügen, also poste ich eine andere Antwort. Mit dem Ansatz von pomber erhielt ich immer wieder die Antwort "400 Bad Request" von einer API, an die ich meine JSON-Anfrage gesendet habe (Visual Studio 2017, .NET 4.6.2). Schließlich wurde das Problem darauf zurückgeführt, dass der von StringContent () erzeugte Header "Content-Type" falsch 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:
quelle
"application/json"
imStringContent
Konstruktor wahrscheinlich nicht erforderlich, da sie explizit für die resultierendecontent.Headers.ContentType
Eigenschaft festgelegt wird. Ich habe dies jedoch nicht im Code getestet.application/json; charset=utf-8
.der Code darüber in vbnet:
Ich hoffe das hilft
quelle