HttpClient不支持PostAsJsonAsync方法C#

我想从我的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; 

我收到错误消息:

 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?) 

请看看我的build议。

是的,你需要添加一个参考

 System.Net.Http.Formatting.dll 

这可以在扩展程序集区域中find。

请注意,实现此目的的一个好方法是将NuGet包System.Net.Http.Formatting.Extension添加到您的项目中。

缺less的参考是System.Net.Http.Formatting.dll 。 但更好的解决scheme是添加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构build服务器上遇到了这个问题,这两个不会一起工作。

或者,您可以用PostAsJsonAsync调用replacePostAsJsonAsync ,这只是新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)

我刚刚从源代码pipe理中检出了一个项目,也有这个问题。

症状是上面描述的错误和对System.Net.Http.Formatting的引用的黄色警告三angular形

为了解决这个问题,我删除了破损的引用,然后使用NuGet安装最新版本的Microsoft.AspNet.WebApi.Client

不用编写这么多的代码来做一个简单的调用,你可以使用互联网上的一个包装器。

我写了一个名为WebApiClient,在NuGet中可用…检查出来!

http://webapiclient.azurewebsites.net

我知道这个答复为时已晚,我有同样的问题,我在添加System.Net.Http.Formatting.Extension Nuget,检查这里和那里后,我发现,添加了Nuget,但System.Net.Http.Formatting.dll没有被添加到引用,我只是重新安装了Nuget