Tidak dapat menemukan cara menggunakan HttpContent

186

Saya mencoba menggunakan HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... tapi saya tidak beruntung menemukan DLL di mana ia didefinisikan.

Pertama, saya mencoba menambahkan referensi Microsoft.Httpjuga System.Net, tetapi tidak ada dalam daftar. Saya juga mencoba menambahkan referensi ke System.Net.Httptetapi HttpContentkelas tidak tersedia.

Jadi, adakah yang bisa memberitahu saya di mana saya dapat menemukan HttpContentkelas?

pengguna1416156
sumber

Jawaban:

-7

Kelas terdaftar hadir di System.Net.Httpmajelis. Perhatikan bahwa kelas ini baru untuk .NET 4.5, jadi Anda harus menggunakan versi BCL itu.

dlev
sumber
2
Ini juga tersedia untuk .NET 4 melalui paket Microsoft.NET.Http dari NuGet
Panagiotis Kanavos
121
Benci menjadi pemilih tetapi diberi pertanyaan, ini bukan jawaban yang bersaing? Tentu System.Net.Http mengandung HttpContent. Tetapi HttpContent tidak memiliki metode Buat. Anda harus menggunakan salah satu kelas turunan ( pfelix.wordpress.com/2012/01/16/… ) seperti StringContent. Misalnya StringContent baru (SOME_JSON)
6footunder
13
@ 6footunder Itu tidak pilih-pilih sama sekali, jawaban ini tidak benar.
Aran Mulholland
Anda dapat melihat jawaban Youngjae di bawah ini untuk contoh yang tepat: stackoverflow.com/a/24474664/21539
Zain Rizvi
8
Jawaban ini tidak alamat maksud dari OP asli pertanyaan yang dari membaca hati saya bertanya -satunya di mana HttpContentkelas dapat ditemukan. (Perhatikan juga bahwa OP menerima jawaban ini.) Kebetulan OP memiliki masalah kedua (mencoba membuat contoh HttpClient) yang kemungkinan tidak jelas pada OP sampai setelah masalah referensi DLL diselesaikan. Beberapa jawaban di sini membahas masalah kedua itu dan banyak yang menganggap jawaban itu berguna. Akhirnya, saya telah mengedit pertanyaan (berdasarkan teks asli OP) untuk memperjelasnya.
DavidRR
374

Cukup gunakan ...

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

Atau,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);
Youngjae
sumber
Mengatakan parameter konten harus IHttpContent dan bukan StringContent. Ketika saya melemparkannya ke antarmuka itu senang, meskipun.
micahhoover
3
Akhirnya menggunakan HttpStringContent. Saya tidak bisa menggunakan kelas StringContent karena PostAsync (atau PutAsync dalam kasus saya) tidak menerima StringContent bahkan jika Anda melemparkannya ke objek IHttpContent.
micahhoover
4
StringContent berfungsi untuk saya dengan PostAsync, tetapi jika Anda ingin atau perlu menggunakan HttpContent, Anda dapat melakukannya seperti ini: konten HttpContent = new StringContent (jsonString);
Chris Koester
Saya terus melihat jawaban ini untuk apa yang tampaknya menjadi masalah yang sama dengan saya, namun ketika saya men-debug melalui kedua API saya, saya mendapatkan PostAsync ("path", StringContent) untuk diaktifkan tetapi ketika itu mengenai API lain saya tidak memiliki tubuh untuk diurai dan digunakan dan sebagai imbalannya saya mendapatkan 500 ... Saya bingung karena tampaknya saya melakukannya seperti ini. Satu-satunya perbedaan adalah bahwa saya tidak membuat serialisasi objek karena sudah serial ketika saya menerimanya di API pertama dan itu adalah passthrough sederhana.
Slagmoth
Ini harus menjadi jawaban: /
DanielV
148

Untuk mengambil komentar 6footunder dan mengubahnya menjadi jawaban, HttpContentadalah abstrak sehingga Anda perlu menggunakan salah satu kelas turunan:

masukkan deskripsi gambar di sini

Chris S
sumber
5
Sepertinya dia menggunakan fitur "Class Diagram" Visual Studio (Klik kanan proyek Anda, Tambah Item, Diagram Kelas. Kemudian Anda dapat pergi melalui Solution Explorer dan memperluas Referensi untuk mendapatkan diagram perpustakaan yang Anda referensi.) Docs.microsoft.com/en -us / visualstudio / ide / ...
Arin
77

Untuk 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
sumber
Saya mencoba menggunakan contoh "non-json" Anda, bagaimana saya harus membaca data di sisi penerima?
Joe
konten var = menunggu response.Content.ReadAsStringAsync ();
Felipe Deveza
6

Sementara versi final dari HttpContent dan seluruh System.Net.Names namesptt akan datang dengan .NET 4.5, Anda dapat menggunakan versi .NET 4 dengan menambahkan paket Microsoft.Net.Http dari NuGet

Panagiotis Kanavos
sumber
0

Saya cukup yakin kode ini tidak menggunakan kelas System.Net.Http.HttpContent, tetapi sebaliknya Microsoft.Http.HttpContent. Microsoft.Http adalah Starter Kit WCF REST, yang tidak pernah keluar sebelum ditempatkan di .NET Framework. Anda masih dapat menemukannya di sini: http://aspnet.codeplex.com/releases/view/24644

Saya tidak akan merekomendasikan mendasarkan kode baru di atasnya.

RasmusW
sumber
0

The System.Net.Httpnamespace (di mana HttpContentkelas berada) baru untuk Net 4,5 , apakah Anda menggunakan VS2012 RC?

Kalau tidak, Anda tidak akan memiliki akses ke ini.

EkoostikMartin
sumber