Ich kann nicht finden, wie HttpContent verwendet wird


184

Ich versuche zu verwenden HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... aber ich habe kein Glück, die DLL dort zu finden, wo sie definiert ist.

Zuerst habe ich versucht, Verweise auf Microsoft.Httpsowie hinzuzufügen System.Net, aber keiner ist in der Liste. Ich habe auch versucht, einen Verweis auf hinzuzufügen, System.Net.Httpaber die HttpContentKlasse ist nicht verfügbar.

Kann mir jemand sagen, wo ich die HttpContentKlasse finden kann ?

Antworten:


-7

Die Klasse wird als in der System.Net.HttpAssembly vorhanden aufgeführt. Beachten Sie, dass diese Klasse für .NET 4.5 neu ist. Sie müssen daher diese Version der BCL verwenden.


2
Es ist auch für .NET 4 über das Microsoft.NET.Http-Paket von NuGet
Panagiotis Kanavos am

121
Hassen Sie es, wählerisch zu sein, aber angesichts der Frage ist dies nicht die konkurrierende Antwort? Sicher, System.Net.Http enthält HttpContent. HttpContent verfügt jedoch nicht über eine Create-Methode. Sie müssen eine der abgeleiteten Klassen ( pfelix.wordpress.com/2012/01/16/… ) wie StringContent verwenden. ZB neuer StringContent (SOME_JSON)
6footunder

13
@ 6footunder Das ist überhaupt nicht wählerisch, diese Antwort ist nicht richtig.
Aran Mulholland

Sie können Youngjaes Antwort unten für ein richtiges Beispiel sehen: stackoverflow.com/a/24474664/21539
Zain Rizvi

8
Diese Antwort befasst sich mit der Absicht der ursprünglichen Frage des OP, die nach meiner sorgfältigen Lektüre nur fragt , wo die HttpContentKlasse zu finden ist. (Beachten Sie auch, dass das OP diese Antwort akzeptiert hat.) Es kommt einfach so vor, dass das OP ein zweites Problem hatte (beim Versuch, eine Instanz von zu erstellen HttpClient), das für das OP wahrscheinlich erst nach Behebung des DLL-Referenzproblems erkennbar war. Einige der Antworten hier befassen sich mit diesem zweiten Problem, und viele fanden diese Antworten nützlich. Schließlich habe ich die Frage (basierend auf dem Originaltext des OP) bearbeitet, um sie zu klären.
DavidRR

373

Benutz einfach...

var stringContent = new StringContent(jObject.ToString());
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Oder,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Sagt, dass der Inhaltsparameter IHttpContent und nicht StringContent sein muss. Wenn ich es auf die Benutzeroberfläche übertrage, ist es jedoch glücklich.
Micahhoover

3
Endete mit HttpStringContent. Ich konnte die StringContent-Klasse nicht verwenden, da PostAsync (oder in meinem Fall PutAsync) StringContent nicht akzeptiert, selbst wenn Sie es in ein IHttpContent-Objekt umwandeln.
Micahhoover

4
StringContent funktioniert für mich mit PostAsync, aber wenn Sie HttpContent verwenden möchten oder müssen, können Sie dies folgendermaßen tun: HttpContent content = new StringContent (jsonString);
Chris Koester

Ich sehe diese Antwort immer wieder auf ein ähnliches Problem wie ich. Beim Debuggen meiner beiden APIs wird jedoch ein PostAsync ("Pfad", StringContent) ausgelöst, aber wenn es auf die andere API trifft, tue ich dies nicht Ich habe einen Körper zum Parsen und Verwenden und bei meiner Rückkehr bekomme ich 500 ... Ich bin ratlos, wie es scheint, mache ich es einfach so. Der einzige Unterschied besteht darin, dass ich das Objekt nicht serialisiere, da es bereits serialisiert ist, wenn ich es in der ersten API erhalte, und es sich um ein einfaches Passthrough handelt.
Slagmoth

Dies sollte die Antwort sein: /
DanielV

147

Es HttpContentist abstrakt, den Kommentar von 6footunder in eine Antwort umzuwandeln. Daher müssen Sie eine der abgeleiteten Klassen verwenden:

Geben Sie hier die Bildbeschreibung ein


5
Anscheinend hat er die Funktion "Klassendiagramm" von Visual Studio verwendet (Klicken Sie mit der rechten Maustaste auf Ihr Projekt, Element hinzufügen, Klassendiagramm
Arin

77

Für JSON Post:

var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

Nicht-JSON:

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("field1", "value1"),
    new KeyValuePair<string, string>("field2", "value2"),
});
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/


Ich versuche, Ihr "Nicht-Json" -Beispiel zu verwenden. Wie soll ich die Daten auf der Empfangsseite lesen?
Joe

var content = warte auf Antwort.Content.ReadAsStringAsync ();
Felipe Deveza

6

Während die endgültige Version von HttpContent und der gesamte System.Net.Http-Namespace mit .NET 4.5 geliefert werden, können Sie eine .NET 4-Version verwenden, indem Sie das Microsoft.Net.Http- Paket von NuGet hinzufügen


0

Ich bin mir ziemlich sicher, dass der Code nicht die System.Net.Http.HttpContent-Klasse verwendet, sondern Microsoft.Http.HttpContent. Microsoft.Http war das WCF REST Starter Kit, das vor dem Einfügen in .NET Framework nie eine Vorschau erstellt hat. Sie finden es immer noch hier: http://aspnet.codeplex.com/releases/view/24644

Ich würde nicht empfehlen, neuen Code darauf aufzubauen.


0

Der System.Net.HttpNamespace (in dem sich die HttpContentKlasse befindet) ist neu in .Net 4.5 . Verwenden Sie einen VS2012-RC?

Andernfalls hätten Sie keinen Zugriff darauf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.