webdevqa.jp.net

.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ディレクティブまたはアセンブリ参照がありませんか?)

プロジェクトはクラスライブラリです。Microsoft.AspNetCore.Appへのパッケージ参照を削除し、代わりにフレームワーク参照を追加するcsprojを更新しました。

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

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

15
kpocrz

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());
}
23
Chris Pratt

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

3
RoguePlanetoid