HttpClient不支持PostAsJsonAsync方法C#

问题描述 投票:200回答:8

我试图从我的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'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)

请看看并给我建议。

c# json asp.net-web-api dotnet-httpclient
8个回答
363
投票

是的,您需要添加引用

System.Net.Http.Formatting.dll

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

实现这一目标的一个好方法是将NuGet包Microsoft.AspNet.WebApi.Client添加到您的项目中。


156
投票

缺少的参考是System.Net.Http.Formatting.dll。但更好的解决方案是添加NuGet包Microsoft.AspNet.WebApi.Client以确保格式化dll的版本与我的项目中的System.Net.Http的.NET框架版本一起使用。


156
投票

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


31
投票

正如已经宣布的那样,自.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)


10
投票

我刚从源代码控制中检出的项目中也遇到了这个问题。

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

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


3
投票

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


1
投票

您可以使用互联网上提供的一个包装器,而不是编写这么多代码来进行简单的调用。

我写了一篇名为WebApiClient的文章,可以在NuGet上找到...看看吧!

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


0
投票

尝试在您的项目中安装NuGet包:Microsoft.AspNet.WebApi.Client:

Install-Package Microsoft.AspNet.WebApi.Client
© www.soinside.com 2019 - 2024. All rights reserved.