Impossible de trouver comment utiliser HttpContent

200

J'essaye d'utiliser HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... mais je n'ai pas de chance de trouver la DLL là où elle est définie.

Tout d'abord, j'ai essayé d'ajouter des références à Microsoft.Httpainsi que System.Net, mais aucun n'est dans la liste. J'ai également essayé d'ajouter une référence à System.Net.Httpmais la HttpContentclasse n'est pas disponible.

Alors, quelqu'un peut-il me dire où je peux trouver la HttpContentclasse?

user1416156
la source

Réponses:

394

Utilisez simplement ...

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

Ou,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);
Youngjae
la source
Dit que le paramètre de contenu doit être IHttpContent et non StringContent. Quand je le lance sur l'interface, c'est heureux, cependant.
micahhoover
3
J'ai fini par utiliser HttpStringContent. Je n'ai pas pu utiliser la classe StringContent car PostAsync (ou PutAsync dans mon cas) n'accepte pas StringContent même si vous le castez en un objet IHttpContent.
micahhoover
4
StringContent fonctionne pour moi avec PostAsync, mais si vous voulez ou devez utiliser HttpContent, vous pouvez le faire comme ceci: HttpContent content = new StringContent (jsonString);
Chris Koester
Je continue de voir cette réponse à ce qui semble être un problème similaire au mien, mais lorsque je débogue via mes deux API, j'obtiens un PostAsync ("chemin", StringContent) à déclencher, mais quand il atteint l'autre API, je ne le fais pas avoir un corps à analyser et à utiliser et au retour je reçois un 500 ... Je suis perdu car il semble que je le fais comme ça. La seule différence est que je ne sérialise pas l'objet car il est déjà sérialisé lorsque je le reçois dans la première API et c'est un simple passthrough.
Slagmoth
1
Cela devrait être la réponse: /
DanielV
153

Prendre le commentaire de 6footunder et le transformer en réponse HttpContentest abstrait, vous devez donc utiliser l'une des classes dérivées:

entrez la description de l'image ici

Chris S
la source
6
On dirait qu'il a utilisé la fonctionnalité "Diagramme de classes" de Visual Studio (cliquez avec le bouton droit sur votre projet, Ajouter un élément, Diagramme de classes. Ensuite, vous pouvez accéder à l'Explorateur de solutions et développer Références pour obtenir les diagrammes des bibliothèques que vous référencez.) Docs.microsoft.com/en -us / visualstudio / ide /…
Arin
87

Pour JSON Post:

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

Non-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
la source
J'essaye d'utiliser votre exemple "non-json", comment dois-je lire les données du côté récepteur?
Joe le
var contents = attendre la réponse.Content.ReadAsStringAsync ();
Felipe Deveza
6

Alors que la version finale de HttpContent et l'ensemble de l'espace de noms System.Net.Http viendra avec .NET 4.5, vous pouvez utiliser une version .NET 4 en ajoutant le package Microsoft.Net.Http de NuGet

Panagiotis Kanavos
la source
0

Je suis presque sûr que le code n'utilise pas la classe System.Net.Http.HttpContent, mais plutôt Microsoft.Http.HttpContent. Microsoft.Http était le kit de démarrage WCF REST, qui ne l'a jamais fait avant d'être placé dans le .NET Framework. Vous pouvez toujours le trouver ici: http://aspnet.codeplex.com/releases/view/24644

Je ne recommanderais pas de baser un nouveau code dessus.

RasmusW
la source
0

Il suffit de laisser le chemin en utilisant Microsoft.AspNet.WebApi.Clientici.

Exemple:

var client = HttpClientFactory.Create();
var result = await client.PostAsync<ExampleClass>("http://www.sample.com/write", new ExampleClass(), new JsonMediaTypeFormatter());
INGÉNIERIE NX
la source