我试图从我的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指令还是程序集引用?)
请您看一下并给我建议。
根据这里谈论使用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;
}
PostAsJsonAsync不再在System.Net.Http.dll(。净4.5.2)。您可以添加对System.Net.Http.Formatting.dll的引用,但这实际上属于较旧的版本。我在我们的TeamCity构建服务器上遇到了这个问题,这两个不能一起合作。
或者,你可以用一个PostAsync调用替换postasjsonasync,这只是new 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