gpt4 book ai didi

json - 如何在 Blazor 服务器应用程序中使用 Http.GetJsonAsync()?

转载 作者:行者123 更新时间:2023-12-02 14:36:52 25 4
gpt4 key购买 nike

由于我目前正在评估 Blazor(服务器),我制作了一个简单的 POC 应用程序在VS2019(版本16.3.8)中用于订购披萨。我创建了一个 Blazor 服务器应用程序,它从中获取数据一个 Web API Core 3.0 项目,没什么花哨的,在索引 Razor 页面启动时获取数据是实现如下:

enter image description here

隐藏外部 API 调用的服务的实现如下:

enter image description here

因此,我在创建的 http 客户端实例上使用常规 GetStringAsync() 方法,该方法返回请求的数据作为 json 字符串,最终反序列化为所需的对象类型。但是,不幸的是我不能在这里使用 GetJsonAsync() 方法,如 GitHub 示例所示可以在这里找到:

<强> https://github.com/software-architects/learn-blazor/tree/master/samples/RestApi

enter image description here

搜索了一段时间后,我找到了下一个网站:

<强> https://learn-blazor.com/architecture/rest-api

这解释了我必须使用“HttpClientJsonExtensions”,如网站下一个片段中所述:

enter image description here

因此,在下载示例并快速查看“RestApi.Client”项目(其中包含WebAssembly 托管应用程序),我看到下一个引用的依赖项:

enter image description here

它(显然)在“Http”类上有扩展方法,用于在客户端应用程序中使用 GetJsonAsync() 方法。

所以,我的问题很明显,我如何在基于 Blazor 服务器的应用程序中具有相同的行为,因为没有基于 Blazor 服务器的应用程序中的 Microsoft.AspNetCore.Blazor 依赖项,如下所示:

enter image description here

因为我的 PizzaMenuService 位于 Blazor Server 应用程序的“Services”文件夹中,并调用 Rest API(如我的请求开头所示),它没有执行 GetJsonAsync() 的扩展方法......那么如何在基于 Blazor 服务器的应用程序上实现这一点?

感谢您的任何回复! 😊

伊曼纽尔·纽滕斯。

最佳答案

这就是它在服务器端 Blazor 中的工作方式:

添加对 Microsoft.AspNetCore.Blazor.HttpClient 包的引用

 <PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.0.0-preview9.19465.2" PrivateAssets="all" />

在 Startup.cs 中,将 HttpClient 添加到 DI 容器:

public void ConfigureServices(IServiceCollection services)
{
...
if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
{
services.AddSingleton<HttpClient>();
}
...
}

在您的“服务”类中,通过构造函数注入(inject) HttpClient:

public PizaaMenuService(HttpClient httpClient)
{
_httpClient = httpClient;
}

然后您应该能够像这样使用 HTTP 和反序列化:

public async Task<Menu> GetPizzaMenuAsync()
{
string sUrl = _ApiUrlBase + "api/pizzamenu";
return await _httpClient.GetJsonAsync<Menu>(sUrl);
}

注意:由于您已经在服务器上运行应用程序,如果您的 API 位于为应用程序提供服务的同一服务器上,您可能不需要通过 HttpClient 调用 API;相反,您可以直接实例化您的业务对象(与您现在在 API Controller 中执行的操作相同)。

关于json - 如何在 Blazor 服务器应用程序中使用 Http.GetJsonAsync()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58972613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com