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 ?

user1416156
quelle

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.

dlev
quelle
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);
Youngjae
quelle
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

Chris S.
quelle
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/

Felipe Deveza
quelle
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

Panagiotis Kanavos
quelle
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.

RasmusW
quelle
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.

EkoostikMartin
quelle