HttpContent.ReadAsAsync在哪里?

Dav*_*fer 257 .net c# asp.net-web-api httpcontent

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

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

J..*_*... 393

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

HttpContentExtensions类

更新:

PM> install-package Microsoft.AspNet.WebApi.Client

根据System.Net.Http.Formatting NuGet包页面,该System.Net.Http.Formatting包现在是遗留的,可以Microsoft.AspNet.WebApi.ClientNuGet上的可用包中找到.

  • @georgiosd我刚刚更新了答案.与此同时,`System.Net.Http.Formatting`似乎已移至http://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/ package. (4认同)
  • @JedatKinports 很确定它没有。WebAPI.Client 包需要 .NET 4.5。我认为旧的 HttpContentExtensions 适用于 .NET 4.0 (2认同)

小智 65

我有同样的问题,所以我只是获取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);
Run Code Online (Sandbox Code Playgroud)

  • 它不一定是一个糟糕的解决方法,它是本地化的,因此不太可能在未来的nuget更新等中被打破.我全都是为了它. (13认同)
  • 除了这个问题没有回答这个问题之外,为什么会这样做呢?它不是"ReadAsAsync"的合理替代品吗? (8认同)
  • 确实是!+1! (7认同)
  • 可能是因为你没有回答扩展方法去哪里的问题.编写自己的解决方法很糟糕 (6认同)
  • 这假定响应具有JSON内容类型. (3认同)

Mar*_*ndl 26

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

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
   await response.Content.ReadAsStringAsync());
Run Code Online (Sandbox Code Playgroud)


Iva*_*cía 6

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

  • 谁在抱怨什么? (3认同)

Vas*_*dov 6

您可以编写扩展方法:

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

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

Man*_*esh 6

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