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'が見つかりませんでした。ディレクティブまたはアセンブリ参照を使用しますか?)
私を見てアドバイスしてください。
はい、あなたはへの参照を追加する必要があります
System.Net.Http.Formatting.dll
これは拡張機能アセンブリ領域にあります。
これを実現するための良い方法は、NuGetパッケージMicrosoft.AspNet.WebApi.Clientをプロジェクトに追加することです。
不足している参照はSystem.Net.Http.Formatting.dll
です。しかし、より良い解決策は、NuGetパッケージMicrosoft.AspNet.WebApi.Client
を追加して、私のプロジェクトでフォーマットdllのバージョンが.NETフレームワークバージョンのSystem.Net.Http
と連動するようにすることです。
PostAsJsonAsync
はSystem.Net.Http.dll
には含まれなくなりました(.NET 4.5.2)。 System.Net.Http.Formatting.dll
への参照を追加できますが、これは実際には古いバージョンに属しています。私は私たちのTeamCityビルドサーバーでこれに問題に遭遇しました、これら2つは協力しませんでした。
あるいは、PostAsJsonAsync
をPostAsync
呼び出しに置き換えることもできます。これは、新しい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 を参照してください。
すでに議論されているように、このメソッドは.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)
を呼び出すことができます。
ソース管理からチェックアウトしたばかりのプロジェクトでも、この問題が発生しました。
症状は、上記のエラーと、System.Net.Http.Formatting
への参照に関する黄色い警告の三角形です。
これを修正するために、私は壊れた参照を削除してからNuGetを使ってMicrosoft.AspNet.WebApi.Client
の最新版をインストールしました。
簡単な電話をかけるためにこの量のコードを書く代わりに、インターネット上で利用可能なラッパーの1つを使用することができます。
私はNuGetで利用可能なWebApiClientと呼ばれるものを書きました...それをチェックしてください!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
プロジェクトにNuGetパッケージをインストールしてみます。Microsoft.AspNet.WebApi.Client:
Install-Package Microsoft.AspNet.WebApi.Client