web-dev-qa-db-ja.com

HttpClientはPostAsJsonAsyncメソッドをサポートしていませんC#

WebアプリケーションからWeb APIを呼び出そうとしています。私は。Net4.5を使用していると私はエラーHttpClientを取得しているコードを書いている間に定義PostAsJsonAsyncメソッドが含まれていません。

以下はそのコードです。

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
   new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

エラーメッセージが表示されます。

エラー: 'System.Net.Http.HttpClient'には 'PostAsJsonAsync'の定義が含まれていませんが、 'System.Net.Http.HttpClient'型の最初の引数を受け入れる拡張メソッド 'PostAsJsonAsync'が見つかりませんでした。ディレクティブまたはアセンブリ参照を使用しますか?)

私を見てアドバイスしてください。

198
Jidheesh Rajan

はい、あなたはへの参照を追加する必要があります

System.Net.Http.Formatting.dll

これは拡張機能アセンブリ領域にあります。

これを実現するための良い方法は、NuGetパッケージMicrosoft.AspNet.WebApi.Clientをプロジェクトに追加することです。

349
Justin Harvey

不足している参照はSystem.Net.Http.Formatting.dllです。しかし、より良い解決策は、NuGetパッケージMicrosoft.AspNet.WebApi.Clientを追加して、私のプロジェクトでフォーマットdllのバージョンが.NETフレームワークバージョンのSystem.Net.Httpと連動するようにすることです。

154
Todd H.

PostAsJsonAsyncSystem.Net.Http.dllには含まれなくなりました(.NET 4.5.2)。 System.Net.Http.Formatting.dllへの参照を追加できますが、これは実際には古いバージョンに属しています。私は私たちのTeamCityビルドサーバーでこれに問題に遭遇しました、これら2つは協力しませんでした。

あるいは、PostAsJsonAsyncPostAsync呼び出しに置き換えることもできます。これは、新しいDLLの一部にすぎません。交換する

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

と:

var response = client.PostAsync("api/AgentCollection", new StringContent(
   new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;

https://code.msdn.Microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836 を参照してください。

153
Jeroen K

すでに議論されているように、このメソッドは.NET 4.5.2からもう利用できません。 Jeroen Kの答え を拡張するには、拡張メソッドを作ることができます。

public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(model);
    var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
    return await client.PostAsync(requestUrl, stringContent);
}

これでclient.PostAsJsonAsync("api/AgentCollection", user)を呼び出すことができます。

30

ソース管理からチェックアウトしたばかりのプロジェクトでも、この問題が発生しました。

症状は、上記のエラーと、System.Net.Http.Formattingへの参照に関する黄色い警告の三角形です。

これを修正するために、私は壊れた参照を削除してからNuGetを使ってMicrosoft.AspNet.WebApi.Clientの最新版をインストールしました。

10
Mr Giggles

簡単な電話をかけるためにこの量のコードを書く代わりに、インターネット上で利用可能なラッパーの1つを使用することができます。

私はNuGetで利用可能なWebApiClientと呼ばれるものを書きました...それをチェックしてください!

https://www.nuget.org/packages/WebApiRestService.WebApiClient/

2
Andreo Romera

プロジェクトにNuGetパッケージをインストールしてみます。Microsoft.AspNet.WebApi.Client:

Install-Package Microsoft.AspNet.WebApi.Client