web-dev-qa-db-ja.com

HttpClientを使用してASP.NET CoreでHTTP POSTメッセージを送信するPostAsJsonAsync

動的オブジェクトを以下のように送信したい

new { x = 1, y = 2 };

hTTP POSTメッセージの本文として。だから私は書いてみる

var client = new HttpClient();

しかし私は方法を見つけることができません

client.PostAsJsonAsync()

だから私はproject.jsonにMicrosoft.AspNetCore.Http.Extensionsパッケージを追加して追加しようとしました

using Microsoft.AspNetCore.Http.Extensions; 

節を使用します。しかし、それは私を助けませんでした。

では、ASP.NET CoreでJSON本文を使用してPOST要求を送信する最も簡単な方法は何ですか?

92
Rem

"Microsoft.AspNet.WebApi.Client"パッケージへの参照を追加する必要があります(サンプルについては この記事 を参照)。

追加の拡張子がなくても、標準のPostAsyncメソッドを使用できます。

client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));

ここでjsonInStringの値はJsonConvert.SerializeObject(<your object>);を呼び出すことで得られます。

141
Set

私はこのクラスを使います:

public class JsonContent : StringContent
{
    public JsonContent(object obj) :
        base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
    { }
}

使用例

new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));
64
stop-cran

私はあなたがAcceptヘッダーをhttpClientにも追加したいという、受け入れられた答えを追加します。

httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
9
Serj Sagan

クラス解析を組み込んでいるので、 IEnterprise.Easy-HTTP を使用できます。

await new RequestBuilder<ExampleObject>()
.SetHost("https://httpbin.org")
.SetContentType(ContentType.Application_Json)
.SetType(RequestType.Post)
.SetModelToSerialize(dto)
.Build()
.Execute();
1
Nikolay Hristov