C# HttpClient没有GetJsonAsync的定义

C# HttpClient没有GetJsonAsync的定义,c#,.net,blazor,dotnet-httpclient,C#,.net,Blazor,Dotnet Httpclient,我目前正在开发Blazor,希望移动我的代码,使其更具可读性和可重用性。在我的razor组件中,该方法完美地工作——在类中,它没有 在我的组件中,我可以简单地使用: response=wait Http.GetJsonAsync(Uri); 在我的课堂上,Visual Studio抱怨System.Net.Http的HttpClient不包含GetJsonAsync的定义,但是我得到了一个类型化的响应,所以我想正确地反序列化它。对于Blazor,有一个扩展类(Microsoft.AspNetC

我目前正在开发Blazor,希望移动我的代码,使其更具可读性和可重用性。在我的razor组件中,该方法完美地工作——在类中,它没有

在我的组件中,我可以简单地使用:

response=wait Http.GetJsonAsync(Uri);

在我的课堂上,Visual Studio抱怨System.Net.Http的HttpClient不包含GetJsonAsync的定义,但是我得到了一个类型化的响应,所以我想正确地反序列化它。

对于Blazor,有一个扩展类(Microsoft.AspNetCore.Blazor.HttpClientJsonExtensions)可以为您提供相同的扩展方法


参考:

从预览8开始,您需要:


注意:这在当时是正确的,但从Blazor版本3.1.0开始,这可能再次发生更改,因此现在您很可能需要
System.Net.Http.Json
包。请参阅下面@JohnB的答案。

只需下载Microsoft.AspNetCore.Blazor.HttpClient包。

值得注意的是,必须选中“包含预发布”才能找到此包。我只是花了半个小时的时间对软件包没有找到感到非常生气,然后搜索谷歌,找出原因

好问题。我假设Darrell(和其他人)的答案在3.0.0版(Blazor WebAssembly预览版)时是100%正确的

但是,对于3.1.301版,我认为软件包的位置已经改变。

目前,名称空间是:
System.Net.Http.Json

这将允许您访问:
HttpClientJsonExtensions

A.如果您想将该代码放入Blazor WebAssembly项目中的一个单独类中,只需将其放在类文件的顶部即可:

using System.Net.Http; // for HttpClient
using System.Net.Http.Json; // for HttpClientJsonExtensions
B.如果要将该类放入单独的项目(.NET Core库),则还需要添加NuGet包:

NuGet包:
System.Net.Http.Json

然后,您可以在您的类中使用它,如下面的示例所示。显然,这些扩展方法正在进行序列化,但有趣的是,包不依赖于
Newtonsoft.Json
,因为它使用了新的
System.Text.Json

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace MyClassLibrary
{
    public class MyClass
    {
        public async Task MyMethod()
        {
            string baseAddress = "http://localhost:57012/";
            var httpClient = new HttpClient() { BaseAddress = new Uri(baseAddress) };
            var myPocos = await httpClient.GetFromJsonAsync<MyPoco[]>("api/mypocos");

            foreach (var myPoco in myPocos)
                Console.WriteLine($"Id: {myPoco.Id}, Name: {myPoco.Name}");
        }
    }

    public class MyPoco
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
使用系统;
使用System.Net.Http;
使用System.Net.Http.Json;
使用System.Threading.Tasks;
命名空间MyClassLibrary
{
公共类MyClass
{
公共异步任务MyMethod()
{
字符串基地址=”http://localhost:57012/";
var httpClient=newhttpclient(){BaseAddress=newuri(BaseAddress)};
var myPocos=await httpClient.GetFromJsonAsync(“api/myPocos”);
foreach(myPoco中的var myPoco)
WriteLine($“Id:{myPoco.Id},Name:{myPoco.Name}”);
}
}
公共类MyPoco
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
}
  • 关于与Utf8Json的对比的文章

截至今天,正确答案是:

using System.Net.Http.Json


你的回答是正确的,但我不认为你在
MessageHandler
上的第一句话与这个问题有什么关系,也许你可以把它作为一个旁注。@Tewr,你是对的,我在想其他事情时有些激动。截至6/20,HTTPClient仍在预发布中,因此,请使用此命令此命令安装此客户端-->安装软件包Microsoft.AspNetCore.Blazor.HttpClient-prerelease此命令可能有助于直接从软件包管理器安装它-----安装软件包Microsoft.AspNetCore.Blazor.HttpClient-prerelease我这样做的次数比我想的要多允许你编辑别人的问题,确保你没有引入编译错误和破坏语法。或者死代码。@PanagiotisKanavos你真的编译了代码吗?让我来帮你:
GetFromJsonAsync()