Memigrasi .NET Core 2 ke .NET Core 3: HttpContent tidak mengandung definisi untuk "ReadAsAsync"


15

Saya mengikuti panduan ini https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio untuk bermigrasi ke .NET Core 3.

Saya mendapatkan kesalahan kompilasi:

Galat CS1061 'HttpContent' tidak mengandung definisi untuk 'ReadAsAsync' dan tidak ada metode ekstensi yang dapat diakses 'ReadAsAsync' menerima argumen pertama dari jenis 'HttpContent' dapat ditemukan (apakah Anda kehilangan arahan menggunakan atau referensi rakitan?)

Proyek ini adalah pustaka kelas, saya telah memperbarui csproj menghapus referensi paket ke Microsoft.AspNetCore.App dan menambahkan referensi kerangka kerja sebagai gantinya:

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

Adakah ide mengapa ini terjadi?

Jawaban:


34

ReadAsAsyncadalah ekstensi .NET Standard yang sebenarnya dibagi antara ASP.NET Core dan ASP.NET Web Api (melalui perpustakaan NuGet). Namun, ia menggunakan JSON.NET untuk melakukan deserialization, dan pada. NET Core 3.0, ASP.NET Core sekarang menggunakan System.Text.Jsonsebagai gantinya. Dengan demikian, pustaka ini (dan ekstensi yang ada di dalamnya) tidak termasuk dalam kerangka .NET Core 3.0 karena hal itu akan memerlukan menyertakan pustaka JSON.NET System.Text.Json.

Meskipun Anda dapat menambahkan Microsoft.AspNet.WebApi.Client(dan Newtonsoft.Jsonmenyertainya) secara manual , Anda harus melanjutkan tanpanya. Bagaimanapun, itu tidak menyelamatkan Anda banyak, karena Anda dapat melakukan hal yang sama hanya dengan:

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

Jika suka, Anda dapat menambahkan ekstensi Anda sendiri HttpContentuntuk membungkusnya dengan ReadAsAsyncmetode:

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

5

ReadAsAsync tidak lagi digunakan sebagai bagian dari .NET Core pada .NET Core 3.0 namun Anda dapat memasukkannya dari paket NuGet Microsoft.AspNet.WebApi.Client dan Anda akan dapat menggunakan ReadAsAsync lagi. Saat memperbarui aplikasi web dari .NET Core 2.0 ke .NET Core 3.0 saya mengalami masalah yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.