Asp.net-Core-3.0
將 .NET Core 2 遷移到 .NET Core 3:HttpContent 不包含“ReadAsAsync”的定義
我正在按照本指南<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 的包引用並添加了一個框架引用:
<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>任何想法為什麼會發生這種情況?
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<MyType>(await response.Content.ReadAsStreamAsync());如果你願意,你可以添加你自己的擴展來
HttpContent把它包裝在一個ReadAsAsync方法中:public static class HttpContentExtensions { public static async Task<T> ReadAsAsync<T>(this HttpContent content) => await JsonSerializer.DeserializeAsync<T>(await content.ReadAsStreamAsync()); }