Migrating .NET Core 2 to .NET Core 3: HttpContent does not contain a definition for "ReadAsAsync"
ReadAsAsync
is a .NET Standard extension that's actually shared between ASP.NET Core and ASP.NET Web Api (via a NuGet library). However, it uses JSON.NET to do the deserialization, and as of .NET Core 3.0, ASP.NET Core now uses System.Text.Json
instead. As such, this library (and the extension it contains) is not included in the .NET Core 3.0 framework because doing so would require including the JSON.NET library in addition to System.Text.Json
.
While you can manually add the Microsoft.AspNet.WebApi.Client
(and Newtonsoft.Json
along with it), you should just move on without it. It doesn't save you much anyways, as you can accomplish the same via just:
await JsonSerializer.DeserializeAsync<MyType>(await response.Content.ReadAsStreamAsync());
If you like, you can add your own extension to HttpContent
to wrap this up in a ReadAsAsync
method:
public static class HttpContentExtensions
{
public static async Task<T> ReadAsAsync<T>(this HttpContent content) =>
await JsonSerializer.DeserializeAsync<T>(await content.ReadAsStreamAsync());
}
ReadAsAsync is deprecated as being part of .NET Core as of .NET Core 3.0 however you can include it as from the NuGet package Microsoft.AspNet.WebApi.Client and you'll be able to use ReadAsAsync again. When updating web application from .NET Core 2.0 to .NET Core 3.0 I experienced the same issue.