HttpContent.ReadAsAsync在哪里?

我在网络上看到大量使用新的HttpClient对象(作为新web API的一部分)的例子,应该有HttpContent.ReadAsAsync<T>方法。然而,MSDN没有提到这个方法,智能感知也没有找到它。

它去哪里了,我该如何解决它?

227631 次浏览

它看起来像是一个扩展方法(在System.Net.Http.Formatting中):

HttpContentExtensions Class

更新:

PM>安装包Microsoft.AspNet.WebApi.Client

根据System.Net.Http.Formatting NuGet包页面,System.Net.Http.Formatting包现在是遗留包,可以在NuGet这里上可用的Microsoft.AspNet.WebApi.Client包中找到。

我有同样的问题,所以我只是得到JSON字符串和反序列化到我的类:

HttpResponseMessage response = await client.GetAsync("Products");
//get data as Json string
string data = await response.Content.ReadAsStringAsync();
//use JavaScriptSerializer from System.Web.Script.Serialization
JavaScriptSerializer JSserializer = new JavaScriptSerializer();
//deserialize to your class
products = JSserializer.Deserialize<List<Product>>(data);

只需右击在你的项目去管理NuGet包搜索Microsoft.AspNet.WebApi.Client安装它,你就可以访问扩展方法。

如果你已经在使用Newtonsoft.Json并且不想安装Microsoft.AspNet.WebApi.Client:

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
await response.Content.ReadAsStringAsync());

如果你在安装NuGet Microsoft.AspNet.WebApi.Client后没有找到它,在解决方案的packages文件夹中手动添加一个引用:

\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll

不要陷入将旧的引用添加到System.Net.Http.Formatting.dll NuGet的陷阱

你可以写扩展方法:

public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
}

2021更新:看起来在。net 5中删除了该方法。或者,你也可以从System.Net.Http.Json.HttpContentJsonExtensions中使用ReadFromJsonAsync<>()。它解决了问题。

虽然我也有同样的问题,但这个帖子中的答案并没有完全帮助我解决问题。因此,我决定把我的研究结果写在这篇文章里。要修复此问题,请执行以下步骤:

  1. 使用NuGet将Microsoft.AspNet.WebApi.Client包添加到项目中。而在ASP。NET解决方案,在Visual Studio IDE中通过Tools > NuGet Package Manager > Package Manager Console打开包管理器控制台,并将Microsoft.AspNet.WebApi.Client包添加到解决方案。
Install-Package Microsoft.AspNet.WebApi.Client -Version 5.2.7
  1. 安装后,检查系统上是否存在扩展DLL。作为第一步的结果,System.Net.Http.Formatting.dll文件应该出现在下面的目录中。
{root-solution-directory}\packages\Microsoft.AspNet.WebApi.Client.{package-version}\lib\net45\
  1. 手动添加相关项目的引用。右键单击ASP. xml文件中的“References"部分。解决方案中的NET项目单击“添加引用…“部分。由于文件System.Net.Http.Formatting.dll是一个扩展名,所以当直接搜索Microsoft.AspNet.WebApi.Client包中的其他项时,它不会被列出。因此,要手动添加DLL文件,请单击“引用Manager"窗口底部的“浏览……“按钮。在第二步所示的目录中选择System.Net.Http.Formatting.dll文件,并选中复选框以将DLL文件包含在项目中。

  2. 在项目中包含System.Net.Http命名空间以在项目中使用此DLL提供的功能;using System.Net.Http.Formatting;声明在HttpContentExtensions静态类中可用。

using System.Net.Http;

可选:你可以通过安装一个System.Net.Http.Formatting.ExtensionWebApiDoodle.Net.Http.Formatting包并按照上面的步骤来实现类似的解决方案。