C# HttpContent.ReadAsAsync在哪里?

C# HttpContent.ReadAsAsync在哪里?,c#,.net,asp.net-web-api,httpcontent,C#,.net,Asp.net Web Api,Httpcontent,我在web上使用新的HttpClient对象(作为新web API的一部分)的大量示例中看到,应该有HttpContent.ReadAsAsync方法。然而,没有提到这个方法,IntelliSense也没有找到它 它到哪里去了?我如何处理它?它看起来像是一个扩展方法(在System.Net.Http.Formatting中): 更新: PM>安装软件包Microsoft.AspNet.WebApi.Client 根据NuGet package页面,现在,System.Net.Http.Form

我在web上使用新的
HttpClient
对象(作为新web API的一部分)的大量示例中看到,应该有
HttpContent.ReadAsAsync
方法。然而,没有提到这个方法,IntelliSense也没有找到它


它到哪里去了?我如何处理它?

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

更新:

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


根据NuGet package页面,现在,
System.Net.Http.Formatting
包是遗留的,可以在上提供的
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);
httpresponsemessageresponse=wait client.GetAsync(“产品”);
//以Json字符串的形式获取数据
字符串数据=wait response.Content.ReadAsStringAsync();
//使用System.Web.Script.Serialization中的JavaScriptSerializer
JavaScriptSerializer JSserializer=新的JavaScriptSerializer();
//反序列化到您的类
products=JSserializer.Deserialize(数据);

只需在项目中单击鼠标右键“go Manage NuGet Packages search for Microsoft.AspNet.WebApi.Client”安装它,您就可以访问扩展方法。

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

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
   await response.Content.ReadAsStringAsync());
var myInstance=JsonConvert.DeserializeObject(
wait 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());
}
public静态异步任务ReadAsAsync(this System.Net.Http.HttpContent){
返回Newtonsoft.Json.JsonConvert.DeserializeObject(wait content.ReadAsStringAsync());
}

2021更新:该方法似乎已在.NET5中删除。或者,您可以使用
System.Net.Http.Json.HttpContentJsonExtensions
中的
ReadFromJsonAsync()。它解决了这个问题。

这在最新的客户端NUGET中是否已被弃用?现在找不到了(以前能找到)。很可能是。NET4.5添加了许多关于异步/任务(等待等)的新内容,因此这些扩展可能不再是必需的。我可能会看看这里,例如:@georgiosd我刚刚更新了答案。同时,
System.Net.Http.Formatting
看起来像是移动到了package中。那么原始问题中的方法,
HttpContent.ReadAsAsync
,是否不在Microsoft.AspNet.WebApi.Client中?建议的替代品是什么?@JedatKinports非常确定它不是。客户端包需要.NET4.5。我认为旧的HttpContentExtensions是针对.NET4.0的,除了这不能回答这个问题之外,它为什么会被否决?这难道不是
ReadAsAsync
的合理替代方案吗?可能是因为您没有回答扩展方法去了哪里的问题。写你自己是一个很差的工作,它不一定是一个糟糕的解决方案,它是本地化的,因此不可能在未来的NuGeT更新中被打破。我完全赞成。这假设响应有JSON内容类型。重要的是要注意这不是特征Par。您导致不必要的分配被读取为
字符串
,只是变成
T
,并且忽略内容类型标题。
ReadAsAsync
的源代码显示它切换使用的格式化程序,并将
传递给格式化程序进行反序列化,如。谁在抱怨什么?这是我最终要做的-我不会为一个2行方法拖动整个DLL。@VasyaMilovidov感谢您共享您的代码。在你提出建议之前,我花了几个小时都没有成功。你的建议很适合我的需要。正如
@Liz
提到的,没有必要使用不必要的DLL安装
Microsoft.AspNet.WebApi.Client
(至少在我的场景中是这样)。这就是我最后要做的。由于不支持“允许字符串属性使用非字符串Json值”,因此尝试使用新的
System.Text.Json
非常麻烦。