299

Web アプリケーションから Web API を呼び出そうとしています。私は.Net 4.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' が見つかりませんでした (ディレクティブまたはアセンブリ参照を使用していますか?)

見てアドバイスをお願いします。

4

13 に答える 13

510

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

System.Net.Http.Formatting.dll

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

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

于 2013-10-03T11:59:24.607 に答える
39

既に議論されているように、このメソッドは .NET 4.5.2 以降では使用できません。Jeroen K's answerを拡張するには、拡張メソッドを作成できます。

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)

于 2016-11-10T10:52:48.050 に答える
2

この量のコードを記述して単純な呼び出しを行う代わりに、インターネットで入手できるラッパーの 1 つを使用できます。

NuGet で入手できる WebApiClient という名前のものを作成しました...チェックしてください!

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

于 2014-06-13T19:06:01.990 に答える