HttpContent'i nasıl kullanacağımı bulamıyorum


186

Kullanmaya çalışıyorum HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... ama tanımlandığı DLL bulmakta şansım yok.

Birincisi, başvurular ekleme çalıştı Microsoft.Httpyanı sıra System.Net, ancak listede ne olduğunu. Ayrıca bir başvuru eklemeyi denedim System.Net.Httpama HttpContentsınıf mevcut değil.

Peki, birisi bana HttpContentsınıfı nerede bulabileceğimi söyleyebilir mi?

Yanıtlar:


-7

Sınıf , bu varlık olarak listelenir içinde System.Net.Httpmontajı. Bu sınıfın .NET 4.5 için yeni olduğuna dikkat edin, bu nedenle BCL'nin bu sürümünü kullanmanız gerekir.


2
Ayrıca .NET 4 için NuGet
Panagiotis Kanavos

121
Seçici olmaktan nefret ediyorum ama soru göz önüne alındığında, bu rekabet cevabı değil mi? Tabii System.Net.Http HttpContent içerir. Ancak HttpContent bir Create yöntemine sahip değildir. StringContent gibi türetilmiş sınıflardan birini ( pfelix.wordpress.com/2012/01/16/… ) kullanmanız gerekir . Örneğin, yeni StringContent (SOME_JSON)
ayak

13
@ 6footunder Bu hiç de seçici değil, bu cevap doğru değil.
Aran Mulholland

Uygun bir örnek için Youngjae'nin cevabını aşağıda görebilirsiniz: stackoverflow.com/a/24474664/21539
Zain Rizvi

8
Bu cevap yapar adresini OP'ın amacını orijinal benim dikkatli okuma sorar sorusuna sadece burada HttpContentsınıf bulunabilir. (Ayrıca OP bu cevabı kabul unutmayın.) Sadece çok OP bir vardı olur , ikinci (bir örneğini oluşturmaya çalışmak sorunu HttpClientolasılıkla kadar OP belirgin değildi) sonra DLL referans problemi çözüldü. Buradaki bazı cevaplar bu ikinci soruna yöneliktir ve birçoğu bu cevapları yararlı bulmuştur. Son olarak, netleştirmek için soruyu (OP'nin orijinal metnine dayanarak) düzenledim.
DavidRR

374

Sadece kullan...

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

Veya,

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

Content parametresinin StringContent değil IHttpContent olması gerektiğini söylüyor. Arayüze koyduğumda mutluyum.
micahhoover

3
HttpStringContent kullanılarak sona erdi. PostAsync (veya benim durumumda PutAsync) bir IHttpContent nesnesine yayınlasanız bile StringContent'i kabul etmediğinden StringContent sınıfını kullanamadım.
micahhoover

4
StringContent, PostAsync ile benim için çalışıyor, ancak HttpContent'i kullanmak veya kullanmak istiyorsanız, bunu şu şekilde yapabilirsiniz: HttpContent content = new StringContent (jsonString);
Chris Koester

Benim için benzer bir sorun gibi görünüyor bu cevap görmeye devam, ancak her iki API ile hata ayıklama gibi, ben bir PostAsync ("yol", StringContent) ateş almak ama diğer API isabet yok Ayrıştırmak ve kullanmak için bir bedenim var ve karşılığında 500 alıyorum ... Görünüşe göre kayboldum, aynen böyle yapıyorum. Tek fark, ilk API'de aldığımda zaten serileştirildiği ve basit bir geçidi olduğu için nesneyi serileştirmiyorum.
Slagmoth

Bu cevap olmalı: /
DanielV

148

6footunder'in yorumunu almak ve bir cevaba dönüştürmek HttpContentsoyuttur, bu yüzden türetilmiş sınıflardan birini kullanmanız gerekir:

resim açıklamasını buraya girin


5
Visual Studio'nun "Sınıf Diyagramı" özelliğini kullandığı anlaşılıyor (Projenize sağ tıklayın, Öğe Ekle, Sınıf Diyagramı. Ardından Çözüm Gezgini'ne gidebilir ve referans verdiğiniz kütüphanelerin diyagramlarını almak için Referanslar'ı genişletebilirsiniz.) Docs.microsoft.com/tr -us / visualstudio / ide /…
Arin

77

JSON Post için:

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

Sigara 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/


Ben senin "json olmayan" örnek kullanmaya çalışıyorum, nasıl alıcı ucundaki verileri okumak gerekir?
Joe

var içerik = yanıt bekliyor. Content.ReadAsStringAsync ();
Felipe Deveza

6

HttpContent'in son sürümü ve System.Net.Http ad alanının tamamı .NET 4.5 ile birlikte gelirken , NuGet'ten Microsoft.Net.Http paketini ekleyerek .NET 4 sürümünü kullanabilirsiniz.


0

Kodun System.Net.Http.HttpContent sınıfını kullanmadığından eminim, bunun yerine Microsoft.Http.HttpContent. Microsoft.Http, .NET Framework'e yerleştirilmeden önce önizlemesini yapmayan WCF REST Başlangıç ​​Seti'ydi. Yine de burada bulabilirsiniz: http://aspnet.codeplex.com/releases/view/24644

Ben yeni kodu dayandırma tavsiye etmem.


0

System.Net.HttpAd ( HttpContentsınıf bulunduğu) için yeni .NET 4.5 , bir VS2012 RC kullanıyorsunuz?

Aksi takdirde, buna erişiminiz olmazdı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.