Where is HttpContent.ReadAsAsync?

本文关键字:ReadAsAsync HttpContent is Where | 更新日期: 2023-09-27 18:32:59

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

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

Where is HttpContent.ReadAsAsync?

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

HttpContentExtensions 类

更新:

PM> install-package 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);

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

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

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

你可以写扩展方法:

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

只需右键单击您的项目,转到管理 NuGet 包搜索 Microsoft.AspNet.WebApi.Client 安装它,您将可以访问扩展方法。

点击了几次并遵循了一堆建议,如果在安装 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

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

  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.NET 项目中的"引用">部分,单击"添加引用...">部分。由于文件System.Net.Http.Formatting.dll是扩展名,因此在直接搜索时不会像Microsoft.AspNet.WebApi.Client包中的其他项目一样列出它。因此,要手动添加DLL文件,请单击"浏览..."按钮在"引用管理器">窗口的底部。在第二步所示的目录中选择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.Extension 或 WebApiDoodle.Net.Http.Formatting 软件包之一并按照上述步骤操作来实现类似的解决方案。