331

我在网络上使用新HttpClient对象(作为新 Web API 的一部分)的大量示例中看到应该有HttpContent.ReadAsAsync<T>方法。但是MSDN没有提到这个方法,IntelliSense也没有找到。

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

4

8 回答 8

505

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

HttpContentExtensions 类

更新:

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

根据System.Net.Http.Formatting NuGet 包页面,该System.Net.Http.Formatting包现在是旧版,可以在此处的 NuGetMicrosoft.AspNet.WebApi.Client上找到的包中找到。

于 2012-05-01T14:50:25.650 回答
71

我有同样的问题,所以我只需获取 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);
于 2014-06-05T05:18:43.233 回答
41

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

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
   await response.Content.ReadAsStringAsync());
于 2018-02-11T19:21:13.680 回答
15

您可以编写扩展方法:

public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
    return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
}
于 2019-01-10T23:48:12.133 回答
13

2021 年更新:看起来该方法已在 .NET5 中删除。或者,您可以使用ReadFromJsonAsync<>()from System.Net.Http.Json.HttpContentJsonExtensions。它解决了目的。

于 2021-03-01T10:03:31.270 回答
6

只需在您的项目中右键单击 Manage NuGet Packages 搜索 Microsoft.AspNet.WebApi.Client 安装它,您将可以访问扩展方法。

于 2017-01-11T21:12:25.853 回答
1

几次点击这个并遵循了一堆建议,如果在安装 NuGet Microsoft.AspNet.WebApi.Client 后您没有发现它可用,请手动从解决方案中的包文件夹中添加一个引用:

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

并且不要陷入向 System.Net.Http.Formatting.dll NuGet 添加旧引用的陷阱

于 2018-10-05T07:31:34.220 回答
0

尽管我遇到了同样的问题,但该线程中的答案并没有完全帮助我解决问题。出于这个原因,我决定在这篇文章中写下我的研究结果。要解决此问题,请按照以下步骤操作:

  1. 使用 NuGet将Microsoft.AspNet.WebApi.Client包添加到项目中。在 ASP.NET 解决方案中,通过转到Tools > NuGet Package Manager > Package Manager ConsoleVisual Studio IDE 打开包管理器控制台并将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.NET 项目中的“引用”部分,单击“添加引用...”部分。由于该文件System.Net.Http.Formatting.dll是扩展名,因此在直接搜索时不会像Microsoft.AspNet.WebApi.Client包中的其他项目一样列出。因此,要手动添加 DLL 文件,请单击“参考管理器”窗口底部的“浏览...”按钮。选择第二步所示目录中的文件并选中复选框以将 DLL 文件包含在项目中。System.Net.Http.Formatting.dll

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

using System.Net.Http;

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

于 2021-11-01T18:15:36.257 回答