web-dev-qa-db-fra.com

Migration de .NET Core 2 vers .NET Core 3: HttpContent ne contient pas de définition pour "ReadAsAsync"

Je suis ce guide https://docs.Microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio pour migrer à .NET Core 3.

Je reçois l'erreur de compilation:

L'erreur CS1061 'HttpContent' ne contient pas de définition pour 'ReadAsAsync' et aucune méthode d'extension accessible 'ReadAsAsync' acceptant un premier argument de type 'HttpContent' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

Le projet est une bibliothèque de classes, j'ai mis à jour son csproj en supprimant une référence de package à Microsoft.AspNetCore.App et en ajoutant une référence de framework à la place:

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

Des idées pourquoi cela se produit?

15
kpocrz

ReadAsAsync est une extension .NET Standard qui est réellement partagée entre ASP.NET Core et ASP.NET Web Api (via une bibliothèque NuGet). Cependant, il utilise JSON.NET pour effectuer la désérialisation et, à partir de .NET Core 3.0, ASP.NET Core utilise désormais System.Text.Json au lieu. En tant que telle, cette bibliothèque (et l'extension qu'elle contient) n'est pas incluse dans le framework .NET Core 3.0 car cela nécessiterait d'inclure la bibliothèque JSON.NET en plus de System.Text.Json.

Bien que vous puissiez ajouter manuellement le Microsoft.AspNet.WebApi.Client (et Newtonsoft.Json avec)), vous devez simplement continuer sans. Cela ne vous économise pas beaucoup de toute façon, car vous pouvez accomplir la même chose via simplement:

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

Si vous le souhaitez, vous pouvez ajouter votre propre extension à HttpContent pour terminer dans une méthode 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 est déconseillé comme faisant partie de .NET Core à partir de .NET Core 3.0 mais vous pouvez l'inclure à partir du package NuGet Microsoft.AspNet.WebApi.Client et vous ' Je pourrai utiliser ReadAsAsync à nouveau. Lors de la mise à jour d'une application Web de .NET Core 2.0 vers .NET Core 3.0, j'ai rencontré le même problème.

3
RoguePlanetoid