Перенесення .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", не вдалося знайти (якщо ви не використовуєте директиву чи посилання на збірку?)

Проект є бібліотекою класів, я оновив його csproj, видаливши посилання пакету на Microsoft.AspNetCore.App і замість цього додавши посилання на рамки:

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

Будь-які ідеї, чому це відбувається?

Відповіді:


34

ReadAsAsyncє розширенням .NET Standard, яке фактично ділиться між 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 у мене виникла та сама проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.