このガイドに従っています 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ディレクティブまたはアセンブリ参照がありませんか?)
プロジェクトはクラスライブラリです。Microsoft.AspNetCore.Appへのパッケージ参照を削除し、代わりにフレームワーク参照を追加するcsprojを更新しました。
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
なぜこれが起こっているのですか?
ReadAsAsync
は、ASP.NET CoreとASP.NET Web API(NuGetライブラリを介して)の間で実際に共有される.NET標準の拡張機能です。ただし、JSON.NETを使用して逆シリアル化を行います。NETCore 3.0以降、ASP.NET Coreは代わりにSystem.Text.Json
を使用するようになりました。そのため、System.Text.Json
に加えてJSON.NETライブラリを含める必要があるため、このライブラリ(およびこのライブラリに含まれる拡張機能)は.NET Core 3.0フレームワークに含まれていません。
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());
}
ReadAsAsyncは.NET Core 3.0の時点で.NET Coreの一部として非推奨ですが、NuGetパッケージから含めることもできますMicrosoft.AspNet.WebApi.Clientそして、 '再びReadAsAsyncを使用できるようになります。 .NET Core 2.0から.NET Core 3.0にWebアプリケーションを更新すると、同じ問題が発生しました。