Di chuyển .NET Core 2 sang .NET Core 3: HttpContent không chứa định nghĩa cho các Read ReadAsAsync


15

Tôi đang làm theo hướng dẫn này https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio để chuyển sang .NET Core 3.

Tôi nhận được lỗi biên dịch:

Lỗi CS1061 'HttpContent' không chứa định nghĩa cho 'ReadAsAsync' và không có phương thức tiện ích mở rộng có thể truy cập 'ReadAsAsync' chấp nhận đối số đầu tiên của loại 'HttpContent' (bạn có thiếu tham khảo chỉ thị hoặc tham chiếu lắp ráp không?)

Dự án là một thư viện lớp, tôi đã cập nhật csproj của nó loại bỏ một tham chiếu gói tới Microsoft.AspNetCore.App và thêm một tham chiếu khung thay thế:

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

Có ý kiến ​​giải thích tại sao điều này lại xảy ra không?

Câu trả lời:


34

ReadAsAsynclà một phần mở rộng .NET Standard thực sự được chia sẻ giữa ASP.NET Core và ASP.NET Web Api (thông qua thư viện NuGet). Tuy nhiên, nó sử dụng JSON.NET để thực hiện quá trình khử lưu huỳnh và kể từ .NET Core 3.0, ASP.NET Core hiện sử dụng System.Text.Jsonthay thế. Do đó, thư viện này (và phần mở rộng mà nó chứa) không được bao gồm trong khung .NET Core 3.0 vì làm như vậy sẽ yêu cầu bao gồm cả thư viện JSON.NET ngoài ra System.Text.Json.

Trong khi bạn có thể tự thêm Microsoft.AspNet.WebApi.Client(và Newtonsoft.Jsoncùng với nó), bạn chỉ nên tiếp tục mà không có nó. Nó không giúp bạn tiết kiệm được nhiều, vì bạn có thể thực hiện tương tự thông qua:

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

Nếu bạn thích, bạn có thể thêm tiện ích mở rộng của riêng mình HttpContentđể kết thúc phần này theo ReadAsAsyncphương thức:

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

5

ReadAsAsync không được coi là một phần của .NET Core kể từ .NET Core 3.0, tuy nhiên bạn có thể đưa nó vào từ gói NuGet Microsoft.AspNet.WebApi.Client và bạn sẽ có thể sử dụng lại ReadAsAsync . Khi cập nhật ứng dụng web từ .NET Core 2.0 lên .NET Core 3.0, tôi gặp vấn đề tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.