.NET Core 2から.NET Core 3への移行:HttpContentに「ReadAsAsync」の定義が含まれていない


15

このガイド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>

なぜこれが起こっているのですか?

回答:


34

ReadAsAsyncASP.NET CoreとASP.NET Web API(NuGetライブラリを介して)の間で実際に共有される.NET標準の拡張機能です。ただし、JSON.NETを使用して逆シリアル化を行います。.NETCore 3.0以降、ASP.NET CoreはSystem.Text.Json代わりに使用します。そのため、このライブラリ(およびそれに含まれる拡張機能)は、.NET Core 3.0フレームワークには含まれていません。これを行うには、に加えて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());
}

5

ReadAsAsyncは、.NET Core 3.0以降、.NET Coreの一部として非推奨になりましたが、NuGetパッケージMicrosoft.AspNet.WebApi.Clientから含めることができ、ReadAsAsyncを再度使用できるようになります。.NET Core 2.0から.NET Core 3.0にWebアプリケーションを更新すると、同じ問題が発生しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.