HttpContent.ReadAsAsync 在哪里?

问题描述 投票:0回答:9

我在网络上看到大量使用新

HttpClient
对象(作为新 Web API 的一部分)的示例,应该有
HttpContent.ReadAsAsync<T>
方法。然而,MSDN没有提到这个方法,IntelliSense也没有找到它。

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

c# .net asp.net-web-api httpcontent
9个回答
537
投票

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

HttpContentExtensions 类

更新:

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

根据 System.Net.Http.Formatting NuGet 包页面,

System.Net.Http.Formatting
包现在已成为旧版,可以在
NuGet 此处
上提供的 Microsoft.AspNet.WebApi.Client 包中找到。


75
投票

我有同样的问题,所以我只需获取 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);

50
投票

如果您已经在使用

Newtonsoft.Json
并且不想安装
Microsoft.AspNet.WebApi.Client
:

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

31
投票

2021 更新:看起来该方法已在 .NET5 中删除。或者,您可以使用

ReadFromJsonAsync<>()
中的
System.Net.Http.Json.HttpContentJsonExtensions
。它解决了目的。


19
投票

你可以写扩展方法:

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

7
投票

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


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 添加旧引用的陷阱


0
投票

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

  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 项目中的 “References” 部分,然后单击 “Add Reference...” 部分。由于文件

    System.Net.Http.Formatting.dll
    是一个扩展名,因此直接搜索时不会像
    Microsoft.AspNet.WebApi.Client
    包中的其他项目一样列出它。因此,要手动添加 DLL 文件,请单击“参考管理器”窗口底部的“浏览...”按钮。选择第二步所示目录中的 System.Net.Http.Formatting.dll 文件并选中复选框以将 DLL 文件包含在项目中。
    在项目中包含

    System.Net.Http
  2. 命名空间,以在项目中使用此DLL提供的功能;
  3. using System.Net.Http.Formatting;

    声明可在

    HttpContentExtensions
    静态类中使用。
    
    
    using System.Net.Http;
    

可选:
您可以通过安装 
System.Net.Http.Formatting.Extension

WebApiDoodle.Net.Http.Formatting 软件包之一并按照上述步骤实现类似的解决方案。 在 .net7 应用程序中,您可以在

Microsoft.AspNet.WebApi.Client

0
投票


© www.soinside.com 2019 - 2024. All rights reserved.