我正在按照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());
}