我正在按照本指南https://docs.microsoft.com/zh-cn/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框架中,因为这样做需要除之外还包括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());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句