HttpContent.ReadAsAsync在哪里?


283

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

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

Answers:


436

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

HttpContentExtensions类

更新:

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

根据System.Net.Http.Formatting NuGet软件包页面,该System.Net.Http.Formatting软件包现在是旧版,可以Microsoft.AspNet.WebApi.ClientNuGet此处的可用软件包中找到。


最新的客户端Nugets是否已弃用此功能?现在找不到(过去能够找到)。
georgiosd

可能是这样。.NET4.5在异步/任务(等待等)方面添加了许多新内容,因此这些扩展可能不再需要。我想,也许看看这里,例如:msdn.microsoft.com/en-us/library/...
Ĵ......

4
@georgiosd我刚刚更新了答案。同时,System.Net.Http.Formatting它似乎已移至nuget.org/packages/Microsoft.AspNet.WebApi.Client程序包。
约瑟夫·伍德沃德2013年

1
原来问题中的方法HttpContent.ReadAsAsync<T>不在Microsoft.AspNet.WebApi.Client中吗?建议的替代品是什么?
Patrick Szalapski

1
@JedatKinports肯定不会。WebAPI.Client软件包需要.NET 4.5。我认为旧的HttpContentExtensions适用于.NET 4.0
J ...

68

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

8
除了这不能回答问题外,为什么还要对此予以否决?这不是一个合理的选择ReadAsAsync吗?
2014年

7
确实是!+1!
Mrchief 2014年

7
可能是因为您没有回答扩展方法在哪里的问题。编写自己的书是一个很糟糕的解决方法
BritishDeveloper 2016年

13
这不一定是一个糟糕的解决方法,它已本地化,因此在将来的nuget更新等中不太可能被破坏。我全力以赴。

3
假设响应具有JSON内容类型。
CodeCaster

30

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

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

9

您可以编写扩展方法:

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

这就是我最终要做的-我不会为2行方法拖动整个DLL。
丽兹(Liz)


0

如果您在安装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添加较旧引用的陷阱

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.