簡體   English   中英

HttpContent.ReadAsAsync 在哪里?

[英]Where is HttpContent.ReadAsAsync?

我在網上看到大量使用新HttpClient對象(作為新 Web API 的一部分)的示例,應該有HttpContent.ReadAsAsync<T>方法。 但是, MSDN沒有提到這種方法,IntelliSense 也沒有找到。

它去了哪里,我該如何解決?

看起來它是一個擴展方法(在 System.Net.Http.Formatting 中):

HttpContentExtensions 類

更新:

PM> 安裝包 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());

您可以編寫擴展方法:

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 安裝它,您將可以訪問擴展方法。

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

已經點擊了幾次並遵循了一系列建議,如果您在安裝 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.ExtensionWebApiDoodle.Net.Http.Formatting包之一並執行上述步驟來實現類似的解決方案。

Install-Package System.Net.Http.Formatting.Extension -Version 5.2.3
Install-Package WebApiDoodle.Net.Http.Formatting -Version 3.0.0-pre01

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM