Asp.net-Core-3.0

將 .NET Core 2 遷移到 .NET Core 3:HttpContent 不包含“ReadAsAsync”的定義

  • November 20, 2019

我正在按照本指南<https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio>遷移到 .NET Core 3。

我收到編譯錯誤:

錯誤 CS1061“HttpContent”不包含“ReadAsAsync”的定義,並且找不到接受“HttpContent”類型的第一個參數的可訪問擴展方法“ReadAsAsync”(您是否缺少 using 指令或程序集引用?)

該項目是一個類庫,我更新了它的 csproj,刪除了對 Microsoft.AspNetCore.App 的包引用並添加了一個框架引用:

 &lt;ItemGroup&gt;
   &lt;FrameworkReference Include="Microsoft.AspNetCore.App" /&gt;
 &lt;/ItemGroup&gt;

任何想法為什麼會發生這種情況?

ReadAsAsync是一個 .NET Standard 擴展,實際上在 ASP.NET Core 和 ASP.NET Web Api 之間共享(通過 NuGet 庫)。但是,它使用 JSON.NET 進行反序列化,從 .NET Core 3.0 開始,現在System.Text.Json改為使用 ASP.NET Core。因此,此庫(及其包含的擴展)不包含在 .NET Core 3.0 框架中,因為這樣做需要除了 .NET 之外還包含 JSON.NET 庫System.Text.Json

雖然您可以手動添加Microsoft.AspNet.WebApi.Client(並Newtonsoft.Json連同它一起),但您應該在沒有它的情況下繼續前進。無論如何,它不會為您節省太多,因為您可以通過以下方式完成相同的操作:

await JsonSerializer.DeserializeAsync&lt;MyType&gt;(await response.Content.ReadAsStreamAsync());

如果你願意,你可以添加你自己的擴展來HttpContent把它包裝在一個ReadAsAsync方法中:

public static class HttpContentExtensions
{
   public static async Task&lt;T&gt; ReadAsAsync&lt;T&gt;(this HttpContent content) =&gt;
       await JsonSerializer.DeserializeAsync&lt;T&gt;(await content.ReadAsStreamAsync());
}

引用自:https://stackoverflow.com/questions/58956527