Не вдається знайти HttpContent


186

Я намагаюся використовувати HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

... але мені не пощастить знайти DLL там, де він визначений.

По-перше, я спробував додати посилання на Microsoft.Http, а також System.Net, але жодна з них не в списку. Я також спробував додати посилання на, System.Net.Httpале HttpContentклас недоступний.

Отже, чи може хтось сказати мені, де я можу знайти HttpContentклас?

Відповіді:


-7

Клас вказаний як присутній у складі System.Net.Http. Зауважте, що цей клас є новим для .NET 4.5, тому вам потрібно використовувати цю версію BCL.


2
Він також доступний для .NET 4 через пакет Microsoft.NET.Http від NuGet
Panagiotis Kanavos

121
Ненавиджу бути вибагливим, але враховуючи питання, це не відповідь на конкуренцію? Sure System.Net.Http містить HttpContent. Але HttpContent не має методу Create. Вам потрібно буде використовувати один із похідних класів ( pfelix.wordpress.com/2012/01/16/… ), наприклад StringContent. Наприклад , новий StringContent (SOME_JSON)
6footunder

13
@ 6footunder Це зовсім не вибагливо, ця відповідь не є правильною.
Аран Малхолланд

Відповідь Youngjae ви можете побачити нижче для належного прикладу: stackoverflow.com/a/24474664/21539
Zain Rizvi

8
Ця відповідь стосується наміру оригінального питання ОП, яке з мого уважного читання запитує лише те, де HttpContentможна знайти клас. (Зауважимо також , що ОП прийняв цю відповідь.) Просто так вийшло , що ОП була друга задача (намагається побудувати екземпляр HttpClient) , який , ймовірно , не було очевидно , ОП , поки після того, як посилання DLL проблема була вирішена. Деякі відповіді тут стосуються цієї другої проблеми, а багато хто вважає ці відповіді корисними. Нарешті, я відредагував це питання (на основі оригінального тексту ОП) для його уточнення.
DavidRR

374

Просто використовуйте ...

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

Або,

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

Каже, що параметр вмісту повинен бути IHttpContent, а не StringContent. Однак, коли я передаю його інтерфейсу, він задоволений.
Міхейховер

3
Закінчено за допомогою HttpStringContent. Я не міг використовувати клас StringContent, оскільки PostAsync (або в моєму випадку PutAsync) не приймає StringContent, навіть якщо ви передаєте його об'єкту IHttpContent.
Міхеховер

4
StringContent для мене працює з PostAsync, але якщо ви хочете або потрібно використовувати HttpContent, ви можете зробити так: HttpContent content = new StringContent (jsonString);
Кріс Костер

Я продовжую бачити цю відповідь на те, що видається подібним моєму, однак, коли я налагоджую через обидва мої API, я отримую PostAsync ("шлях", StringContent) для запуску, але коли він потрапляє на інший API, я не маю тіло для розбору та використання, а повернувшись, я отримую 500 ... Я в збитку, як здається, я роблю це саме так. Різниця лише в тому, що я не серіалізую об'єкт, оскільки він вже серіалізується, коли я отримую його в першому API, і це простий прохід.
Slagmoth

На це повинна відповісти: /
DanielV

148

Щоб взяти коментар 6footunder і перетворити його на відповідь, HttpContentабстрактно, тому вам потрібно використовувати один із похідних класів:

введіть тут опис зображення


5
Схоже, він використав функцію "Діаграма класів" Visual Studio (Клацніть правою кнопкою миші ваш проект, Додати елемент, Діаграма класів. Потім ви можете перейти через Провідник рішень і розгорнути посилання, щоб отримати діаграми бібліотек, на які ви посилаєтесь.) Docs.microsoft.com/uk -us / visualstudio / ide /…
Арін

77

Для повідомлення JSON:

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

Не-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/


Я намагаюся використати ваш приклад "не-json", як я повинен читати дані на кінці прийому?
Джо

var content = очікуйте відповіді.Content.ReadAsStringAsync ();
Феліпе Девеза


0

Я впевнений, що в коді не використовується клас System.Net.Http.HttpContent, а натомість Microsoft.Http.HttpContent. Microsoft.Http - це Starter Kit WCF REST, який ніколи не робив його попередній попередній перегляд до розміщення в .NET Framework. Ви все ще можете їх знайти тут: http://aspnet.codeplex.com/releases/view/24644

Я б не рекомендував базувати на ньому новий код.


0

System.Net.HttpІмена (де HttpContentклас проживає) є новим для .Net 4.5 , ви використовуєте VS2012 RC?

Інакше ви не мали б до цього доступу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.