Migrieren von .NET Core 2 zu .NET Core 3: HttpContent enthält keine Definition für "ReadAsAsync".

15

Ich folge diesem Handbuch https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio , um auf .NET Core 3 zu migrieren.

Ich erhalte den Kompilierungsfehler:

Fehler CS1061 'HttpContent' enthält keine Definition für 'ReadAsAsync' und es konnte keine zugängliche Erweiterungsmethode 'ReadAsAsync' gefunden werden, die ein erstes Argument vom Typ 'HttpContent' akzeptiert (fehlt Ihnen eine using-Direktive oder eine Assemblyreferenz?)

Das Projekt ist eine Klassenbibliothek. Ich habe das csproj aktualisiert und einen Paketverweis auf Microsoft.AspNetCore.App entfernt und stattdessen einen Framework-Verweis hinzugefügt:

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

Irgendwelche Ideen, warum das passiert?

kpocrz
quelle

Antworten:

34

ReadAsAsyncist eine .NET-Standarderweiterung, die tatsächlich von ASP.NET Core und ASP.NET Web Api (über eine NuGet-Bibliothek) gemeinsam genutzt wird. Für die Deserialisierung wird jedoch JSON.NET verwendet. Ab .NET Core 3.0 wird jetzt System.Text.Jsonstattdessen ASP.NET Core verwendet . Daher ist diese Bibliothek (und die darin enthaltene Erweiterung) nicht im .NET Core 3.0-Framework enthalten, da hierfür zusätzlich die JSON.NET-Bibliothek erforderlich wäre System.Text.Json.

Während Sie das Microsoft.AspNet.WebApi.Client(und Newtonsoft.Jsonzusammen damit) manuell hinzufügen können , sollten Sie einfach ohne es weitermachen. Es spart Ihnen sowieso nicht viel, da Sie dasselbe erreichen können, indem Sie einfach:

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

Wenn Sie möchten, können Sie Ihre eigene Erweiterung hinzufügen HttpContent, um dies in einer ReadAsAsyncMethode zusammenzufassen:

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

ReadAsAsync ist veraltet als Teil von .NET Core als von .NET - Core von 3,0 aber Sie es wie aus dem NuGet Paket enthalten können Microsoft.AspNet.WebApi.Client und Sie werden in der Lage sein zu verwenden ReadAsAsync wieder. Beim Aktualisieren der Webanwendung von .NET Core 2.0 auf .NET Core 3.0 trat das gleiche Problem auf.

RoguePlanetoid
quelle