Migrazione di .NET Core 2 a .NET Core 3: HttpContent non contiene una definizione per "ReadAsAsync"


15

Sto seguendo questa guida https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio per migrare a .NET Core 3.

Ricevo l'errore di compilazione:

L'errore CS1061 "HttpContent" non contiene una definizione per "ReadAsAsync" e non è stato trovato alcun metodo di estensione accessibile "ReadAsAsync" che accetta un primo argomento di tipo "HttpContent" (manca una direttiva che utilizza o un riferimento di assembly?)

Il progetto è una libreria di classi, ho aggiornato il suo csproj rimuovendo un riferimento al pacchetto a Microsoft.AspNetCore.App e aggiungendo invece un riferimento al framework:

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

Qualche idea sul perché questo stia accadendo?

Risposte:


34

ReadAsAsyncè un'estensione .NET standard attualmente condivisa tra ASP.NET Core e ASP.NET Web Api (tramite una libreria NuGet). Tuttavia, utilizza JSON.NET per eseguire la deserializzazione e, a partire da .NET Core 3.0, ora utilizza ASP.NET Core System.Text.Json. Come tale, questa libreria (e l'estensione che contiene) non è inclusa nel framework .NET Core 3.0 perché per farlo sarebbe necessario includere la libreria JSON.NET in aggiunta a System.Text.Json.

Mentre puoi aggiungere manualmente Microsoft.AspNet.WebApi.Client(e Newtonsoft.Jsoninsieme ad esso), dovresti semplicemente andare avanti senza di esso. Non ti risparmia molto comunque, poiché puoi ottenere lo stesso risultato semplicemente:

await JsonSerializer.DeserializeAsync<MyType>(await response.Content.ReadAsStreamAsync());

Se lo desideri, puoi aggiungere la tua estensione a HttpContentper concludere in un ReadAsAsyncmetodo:

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

5

ReadAsAsync è deprecato come parte di .NET Core da .NET Core 3.0, tuttavia è possibile includerlo dal pacchetto NuGet Microsoft.AspNet.WebApi.Client e sarà possibile utilizzare nuovamente ReadAsAsync . Durante l'aggiornamento dell'applicazione Web da .NET Core 2.0 a .NET Core 3.0 ho riscontrato lo stesso problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.