编译器找不到 PostAsJsonAsync 方法

Posted

技术标签:

【中文标题】编译器找不到 PostAsJsonAsync 方法【英文标题】:Compiler can't find PostAsJsonAsync method 【发布时间】:2016-05-04 18:00:02 【问题描述】:

我正在构建一个调用 RESTful API Web 服务的 ASP.NET MVC 5 razor 应用程序。API 中的一个调用使用 POST 方法。我的代码中有这一行:

var response = httpClient.PostAsJsonAsync("/api/account/AddUserAccount", item).Result;

现在,我能够构建该行而不会显示任何错误,但是当我构建应用程序时,我得到了

“HttpClient”不包含“PostAsJsonAsync”的定义,并且找不到接受“HttpClient”类型的第一个参数的扩展方法“PostAsJsonAsync”

我已经对错误进行了搜索,并在 Stack Overflow 上找到了帖子,上面写着要添加对 System.Net.Http.Formatting.dll 的引用,但我在我的系统上找不到该 DLL。如何解决此错误?

【问题讨论】:

你的意思是System.Net.Http.Formatting? 我安装了它,但它没有解决问题。现在我收到有关无法解析 System.Net.Http 和项目 TestAccountService 中的依赖 System.Net.Http.Formatting.Extension 5.2.3 不支持框架 DNXCore,Version=v5.0 的消息。 如果您使用的是 DNX,那么您不能使用 PostAsJsonAsync 方法。请尝试以下操作:var response = await client.PostAsync("api/values", new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(item);, Encoding.UTF8,"application/json")); 我能够得到您的第二个编译建议。谢谢。如果你把它作为一个答案,我会给你功劳。 @TonyVitabile - 我只是将所有 cmets 总结为答案。 【参考方案1】:

如果您要使用PostAsJsonAsync 方法,那么您需要使用以下NuGet Package。

但是,如果您使用的是 DNX,它将无法工作,因为它不支持 DNX(还没有?)。

在这种情况下,您可以执行以下操作:

var response = await client.PostAsync("api/values", new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(item);, Encoding.UTF8,"application/json"));

这应该会有所帮助。

【讨论】:

【参考方案2】:

您缺少 using 语句。

using System.Net.Http; /* probably this one */
using System.Net.Http.Headers;

当然,using 语句不好,除非你有 System.Net.Http.Formatting(.dll) 引用(正如您在搜索中发现的那样)

这个 dll 来自一个 nuget 包!

Microsoft.AspNet.WebApi.Client

最新链接:

https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/

我在这里的版本(我在其中找到了那个 .dll 的副本)

https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/4.0.20710

【讨论】:

我在“添加引用”对话框中看到的唯一 DLL 是 System.Net.dll 和 System.Net.Http.dll;我没有看到 System.Net.Http.Formatting.dll

以上是关于编译器找不到 PostAsJsonAsync 方法的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 中的 PostAsJsonAsync 方法在哪里?

C#程序在VS编译器加载时出现找不到方法,无法显示该程序窗体设计器

PostAsJsonAsync 未按预期运行

几个开发中遇到的问题及解决办法

java踩坑-编译错误:FastJson与lombok导致找不到符号:方法getId

PostAsJsonAsync C# - 如何为 POST 请求正确设置标头 - BAD REQUEST 400