我试图从我的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。的定义 'PostAsJsonAsync'和没有扩展方法'PostAsJsonAsync'接受的第一个参数 “System.Net.Http类型。HttpClient'可以被找到(你丢失了吗 using指令还是程序集引用?)

请您看一下并给我建议。


当前回答

试着在你的项目中安装NuGet包:

Install-Package Microsoft.AspNet.WebApi.Client

其他回答

只是在评论中扩展了杰伦的答案和建议:

var content = new StringContent(
    JsonConvert.SerializeObject(user), 
    Encoding.UTF8, 
    MediaTypeNames.Application.Json);

var response = await client.PostAsync("api/AgentCollection", content);

根据这里谈论使用Newtonsoft的答案。Json,我创建了一个helper类:

public class JsonContent : StringContent
{
    public JsonContent(object model) 
        : base(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json")
    {
    }
}

使用示例:

using (var content = new JsonContent(user))
{
    var response = client.PostAsync("api/AgentCollection", content).Result;
}

我知道这个回复太迟了,我也有同样的问题,我正在添加System.Net.Http.Formatting.Extension Nuget,在检查了这里和那里之后,我发现Nuget已经添加了,但是System.Net.Http.Formatting.dll没有添加到引用中,我只是重新安装了Nuget

对我来说,我在多次尝试后找到了解决方案,这就是替换

HttpClient

with

System.Net.Http.HttpClient

是的,您需要添加一个引用

System.Net.Http.Formatting.dll

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

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