Миграция .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», и нет доступного метода расширения «ReadAsAsync», принимающего первый аргумент типа «HttpContent» (вы пропустили директиву using или ссылку на сборку?)

Проект является библиотекой классов, я обновил его csproj, удалив ссылку на пакет для Microsoft.AspNetCore.App и добавив вместо этого ссылку на структуру:

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

Есть идеи, почему это происходит?

kpocrz
источник

Ответы:

34

ReadAsAsyncэто стандартное расширение .NET, которое на самом деле используется ASP.NET Core и ASP.NET Web Api (через библиотеку NuGet). Однако для десериализации используется JSON.NET, а с .NET Core 3.0 System.Text.Jsonвместо него теперь используется ASP.NET Core . Таким образом, эта библиотека (и расширение, которое она содержит) не включена в платформу .NET Core 3.0, поскольку для этого потребуется добавить библиотеку JSON.NET в дополнение к System.Text.Json.

Хотя вы можете вручную добавить Microsoft.AspNet.WebApi.ClientNewtonsoft.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 начиная с .NET Core 3.0, однако вы можете включить его как из пакета NuGet Microsoft.AspNet.WebApi.Client, и вы сможете снова использовать ReadAsAsync . При обновлении веб-приложения с .NET Core 2.0 до .NET Core 3.0 у меня возникла та же проблема.

RoguePlanetoid
источник