การโยกย้าย. 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 extension ที่ใช้ร่วมกันจริงระหว่าง ASP.NET Core และ ASP.NET Web Api (ผ่านไลบรารี NuGet) อย่างไรก็ตามมันใช้ JSON.NET เพื่อทำการดีซีเรียลไลซ์เซชั่นและในขณะที่. NET Core 3.0 ตอนนี้ ASP.NET Core จะใช้System.Text.Jsonแทน ดังนั้นไลบรารีนี้ (และส่วนขยายที่มี) จะไม่รวมอยู่ในกรอบงาน. NET Core 3.0 เนื่องจากการทำเช่นนั้นจะต้องมีการรวมไลบรารี JSON.NET ไว้System.Text.Jsonด้วย

ในขณะที่คุณสามารถเพิ่มMicrosoft.AspNet.WebApi.Client(และNewtonsoft.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 ฉันประสบปัญหาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.