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中可用…检查出来!
我知道这个答复为时已晚,我有同样的问题,我在添加System.Net.Http.Formatting.Extension
Nuget,检查这里和那里后,我发现,添加了Nuget,但System.Net.Http.Formatting.dll
没有被添加到引用,我只是重新安装了Nuget
- 当OwinStartup时如何使用DI容器
- 寻找在Ruby on Rails中构build安全REST API的build议
- ASP.NET WebApiunit testing与Request.CreateResponse
- 如何使用双层架构将UseEmbeddedHttpServer设置为true时,使我的RavenDB应用程序正确执行?
- 在定制授权MVC4 Web Api中访问post或get参数
- 抛出HttpResponseException或返回Request.CreateErrorResponse?
- 我应该如何将多个parameter passing给ASP.Net Web API GET?
- ASP.NET Web API身份validation
- Asp.net Web API返回非描述性错误500