我试图从我的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指令还是程序集引用?)

请您看一下并给我建议。


当前回答

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

System.Net.Http.Formatting.dll

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

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

其他回答

如果您正在使用Blazor组件并得到此错误,则意味着您的组件无法找到http客户端。 在你的blazor组件上使用这条线。

@inject HttpClient Http

确保在程序或启动文件中有这一行

builder.Services.AddScoped(sp => 
new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

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

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框架版本一起工作。

正如已经讨论过的,这个方法在。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);
}

现在您可以呼叫客户端了。PostAsJsonAsync(“api / AgentCollection”、用户)。

您可以使用internet上的一种包装器,而不是编写这么多代码来进行简单的调用。

我写了一个叫WebApiClient的程序,可以在NuGet上找到…点击这里查看详情!

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