2013-10-03 9 views
140

私は、.NET 4.5を使用して私のWeb application.AmからWeb APIを呼び出すしようとしていますをサポートしていないのHttpClientとコードを書いている間、私は定義PostAsJsonAsync方法はPostAsJsonAsync方法のC#

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; 
に含まれていないエラーのHttpClientを取得しています

Error: 'System.Net.Http.HttpClient' does not contain a definition for 'PostAsJsonAsync' and 
no extension method 'PostAsJsonAsync' accepting a first argument of type  
'System.Net.Http.HttpClient' could be found (are you missing a using directive or an 
assembly reference?) 

顔をしていると私にアドバイスをください:

は、私は、エラーメッセージを取得しています。

+3

「Microsoft.AspNet.WebApi.Client」.Nugetパッケージを追加することをお勧めします。それでおしまい! –

答えて

255

はい、あなたはこれが拡張アセンブリエリアで見つけることができ

System.Net.Http.Formatting.dll 

への参照を追加する必要があります。

これを実現するには、NuGetパッケージSystem.Net.Http.Formatting.Extensionをプロジェクトに追加する方法があります。

+4

エラー:「Newtonsoft.Json、Version = 4.5.0.0、Culture = neutral、PublicKeyToken = 30ad4fe6b2a6aeed」またはその依存関係の1つを読み込めませんでした。指定されたファイルが見つかりません。 " –

+2

NuGetに入り、オンラインパッケージでJson.NETを検索するか、ここからNuGetを使用しない場合はここからダウンロードできます。http://james.newtonking.com/json –

+0

ありがとうございます –

109

欠落している参照はSystem.Net.Http.Formatting.dllです。しかし、より良い解決策は、NuGetパッケージMicrosoft.AspNet.WebApi.Clientを追加して、フォーマットDLLのバージョンがSystem.Net.Httpの.NETフレームワークバージョンで確実に処理されるようにすることです。

+1

@Yuval - 私が提案した "解決策"がコメントのように聞こえるようになったことを今や認識しています。 Andreoが私が提案したNuGetパッケージを作ったことが判明しました。 –

+0

簡単なトリックと素敵な解決策+1 –

+0

これは私の答えでした! (私の質問に) – JenonD

0

単純な呼び出しを行うためにこの量のコードを書く代わりに、インターネット経由で利用できるラッパーの1つを使用できます。

NuGetで利用可能なWebApiClientを作成しました。ぜひチェックしてください!

http://webapiclient.azurewebsites.net

+0

[@Andreo](https://stackoverflow.com/users/3738778/andreo-romera)リンク(http://webapiclient.azurewebsites.net)は2017年11月30日に壊れています。 NuGetの作業リンクはhttps://www.nuget.org/packages/WebApiRestService.WebApiClient/ –

+0

です。申し訳ありませんが、マイクロソフトでは私の晴れの定期購読が終了し、URLはもう有効ではありません:( –

93

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

また、PostAsJsonAsyncを新しいdllの一部であるPostAsync呼び出しに置き換えることもできます。 がで

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

を置き換えます。私は、この返信が遅すぎる知っhttps://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836

+4

これが答えです。何かが正しい方法です – Alireza

+4

これはこれまでのところ最高の答えです.NuGetパッケージやDLLを追加しないでください。 –

+3

完全に最高の答え。選択された回答はベストプラクティスではありません。実際にはDLLを参照しないことをお勧めします。 – Astaar

1

を参照してください

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

、私は同じ問題を持っていたし、私はあちこちで確認した後、System.Net.Http.Formatting.Extension Nugetを追加して私はNugetが追加されたが、System.Net.Http.Formatting.dllは参照に追加されていないことを発見しました。ただNugetを再インストールしました

20

すでに討議されているように、このメソッドは.NET 4.5.2以降は使用できなくなりました。今、あなたはclient.PostAsJsonAsync("api/AgentCollection", user)を呼び出すことができます

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

Jeroen K's answerに拡大するには、拡張メソッドを作ることができます。

4

私はソース管理からちょうどチェックアウトしたプロジェクトでもこの問題を抱えていました。

症状は、上述したエラー及びこれを修正するSystem.Net.Http.Formatting

を参照に黄色の警告三角形た、私が壊れた参照を除去し、次いでMicrosoft.AspNet.WebApi.Clientの最新バージョンをインストールするNuGetを使用します。

+0

それは動作します!Nugetコンソールでインストールするには 'Install-Package Microsoft.AspNet.WebApi.Client' –

関連する問題