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
NuGetのMicrosoft.NET.Httpパッケージから.NET 4にも利用できます
Panagiotis Kanavos

121
うるさいのは嫌いですが、質問をすると、これは完全な答えではありませんか?確かにSystem.Net.HttpにはHttpContentが含まれています。ただし、HttpContentにはCreateメソッドがありません。StringContentのような派生クラスの1つ(pfelix.wordpress.com/2012/01/16/…)を使用する必要があります。たとえば、新しいStringContent(SOME_JSON)
6footunder

13
@ 6footunderそれは全然うるさくありません、この答えは正しくありません。
アランMulholland 14

あなたは適切な例については、以下のYoungjaeの答えを見ることができます:stackoverflow.com/a/24474664/21539
ザインRizvi

8
この回答、OPの元の質問の意図に対処するものであり、私の注意深い読みから、クラスがどこにあるかのみを尋ねていHttpContentます。(また、OPはこの答えを受け入れたことに注意してください。)ちょうどので、OPが持っていたことが起こる(のインスタンスを作成しようとしている問題HttpClient可能性までOPに明らかではなかった)の後、DLLの参照の問題が解決されましたが。ここでの回答のいくつかは2番目の問題に対処しており、多くの回答がそれらの回答が有用であると認識しています。最後に、問題を明確にするために(OPの元のテキストに基づいて)質問を編集しました。
DavidRR 2016年

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);

contentパラメータはStringContentではなくIHttpContentである必要があると言います。それをインターフェイスにキャストすると、満足です。
micahhoover 2015年

3
最終的にはHttpStringContentを使用しました。StringContentクラスを使用できませんでした。PostAsync(または私の場合はPutAsync)は、IHttpContentオブジェクトにキャストしても、StringContentを受け入れないためです。
micahhoover 2015年

4
StringContentはPostAsyncで動作しますが、HttpContentを使用する必要がある場合は、次のように使用できます。HttpContent content = new StringContent(jsonString);
Chris Koester 2017

私の場合と同様の問題のように思われるものに対するこの答えを繰り返し見ていますが、両方のAPIをデバッグしているときにPostAsync( "path"、StringContent)が起動するようになっていますが、他のAPIにヒットしたときは動作しません解析して使用する本体があり、戻り時に500を取得します...このようにしているかのように、私は途方に暮れています。唯一の違いは、最初のAPIでオブジェクトを受け取ったときにオブジェクトが既にシリアル化されており、単純なパススルーであるため、オブジェクトをシリアル化しないことです。
Slagmoth

これが答えになるはずです:/
DanielV

148

6footunderのコメントを受け取って回答に変換するのHttpContentは抽象的であるため、派生クラスの1つを使用する必要があります。

ここに画像の説明を入力してください


5
彼はVisual Studioの「クラスダイアグラム」機能を使用したようです(プロジェクトを右クリックして、アイテムを追加し、クラスダイアグラムを選択します。次に、ソリューションエクスプローラーから参照を展開して、参照するライブラリのダイアグラムを取得できます。)docs.microsoft.com/en -us / visualstudio / ide /…
Arin

77

JSON Postの場合:

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 contents = await response.Content.ReadAsStringAsync();
フェリペデベザ


0

コードがSystem.Net.Http.HttpContentクラスを使用しておらず、代わりにMicrosoft.Http.HttpContentを使用していると確信しています。Microsoft.HttpはWCF RESTスターターキットで、.NET Frameworkに配置される前にプレビューできませんでした。あなたはまだそれをここで見つけることができます:http : //aspnet.codeplex.com/releases/view/24644

新しいコードをベースにすることはお勧めしません。


0

System.Net.Http名前空間(HttpContentクラスが存在するが)に新しいです。ネット4.5、あなたはVS2012 RCを使用していますか?

そうしないと、これにアクセスできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.