我试图从我的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'的定义,并且没有扩展方法'PostAsJsonAsync'接受类型'System.Net.Http.HttpClient'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)
请看看并给我建议。
是的,您需要添加引用
System.Net.Http.Formatting.dll
这可以在扩展程序集区域中找到。
实现这一目标的一个好方法是将NuGet包Microsoft.AspNet.WebApi.Client添加到您的项目中。
缺少的参考是System.Net.Http.Formatting.dll
。但更好的解决方案是添加NuGet包Microsoft.AspNet.WebApi.Client
以确保格式化dll的版本与我的项目中的System.Net.Http
的.NET框架版本一起使用。
PostAsJsonAsync
不再在System.Net.Http.dll
(.NET 4.5.2)。您可以添加对System.Net.Http.Formatting.dll
的引用,但这实际上属于旧版本。我在TeamCity构建服务器上遇到了这个问题,这两个不会合作。
或者,你可以用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;
请注意,JavaScriptSerializer
位于命名空间中:System.Web.Script.Serialization
。
您必须在csproj中添加一个程序集引用:System.Web.Extensions.dll
见https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
正如已经宣布的那样,自.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)
。
我刚从源代码控制中检出的项目中也遇到了这个问题。
症状是上面描述的错误和对System.Net.Http.Formatting
的引用上的黄色警告三角形
为了解决这个问题,我删除了损坏的引用,然后使用NuGet安装最新版本的Microsoft.AspNet.WebApi.Client
。
我知道这个回复为时已晚,我有同样的问题,我正在添加System.Net.Http.Formatting.Extension
Nuget,在这里和那里检查后我发现Nuget已被添加但是System.Net.Http.Formatting.dll
没有被添加到参考文献中,我只是重新安装了Nuget
您可以使用互联网上提供的一个包装器,而不是编写这么多代码来进行简单的调用。
我写了一篇名为WebApiClient的文章,可以在NuGet上找到...看看吧!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
尝试在您的项目中安装NuGet包:Microsoft.AspNet.WebApi.Client:
Install-Package Microsoft.AspNet.WebApi.Client