C# HttpClient没有GetJsonAsync的定义
我目前正在开发Blazor,希望移动我的代码,使其更具可读性和可重用性。在我的razor组件中,该方法完美地工作——在类中,它没有 在我的组件中,我可以简单地使用: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
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()