.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 코어 3로 마이그레이션합니다.

컴파일 오류가 발생합니다.

오류 CS1061 'HttpContent'에 'ReadAsAsync'에 대한 정의가 포함되어 있지 않으며 'HttpContent'유형의 첫 번째 인수를 승인하는 액세스 가능한 확장 메소드 'ReadAsAsync'를 찾을 수 없습니다 (사용 지시문 또는 어셈블리 참조가 누락 되었습니까?)

이 프로젝트는 클래스 라이브러리이며 csproj를 업데이트하여 Microsoft.AspNetCore.App에 대한 패키지 참조를 제거하고 대신 프레임 워크 참조를 추가했습니다.

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

왜 이런 일이 일어나고 있습니까?

답변:


34

ReadAsAsyncASP.NET Core와 ASP.NET Web Api (NuGet 라이브러리를 통해)간에 실제로 공유되는 .NET 표준 확장입니다. 그러나 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 3.0에서 .NET Core의 일부로 더 이상 사용되지 않지만 NuGet 패키지 Microsoft.AspNet.WebApi.Client에서 와 같이 포함 시킬 수 있으며 ReadAsAsync를 다시 사용할 수 있습니다 . 웹 응용 프로그램을 .NET Core 2.0에서 .NET Core 3.0으로 업데이트 할 때 동일한 문제가 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.