我正在按照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'的第一个参数(您是否缺少using指令或程序集引用?)

该项目是一个类库,我更新了它的csproj,删除了对Microsoft.AspNetCore.App的包引用,并添加了框架引用:

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

任何想法为什么会这样?

最佳答案

ReadAsAsync是.NET Standard扩展,实际上在ASP.NET Core和ASP.NET Web Api之间共享(通过NuGet库)。但是,它使用JSON.NET进行反序列化,并且从.NET Core 3.0开始,ASP.NET Core现在改为使用System.Text.Json。因此,该库(及其包含的扩展名)未包含在.NET Core 3.0框架中,因为这样做需要除了System.Text.Json之外还包括JSON.NET库。

虽然您可以手动添加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());
}

10-05 22:47