c# - 如何从 Blazor 中的不同 API 路由获取另一个列表的列表?
问题描述
我碰到了一堵砖墙,我想知道如何解决这个问题。我正在尝试学习 Blazor,并且正在使用开放 API 来接收有关《权力的游戏》之家及其所有宣誓成员的数据。所以我基本上试图收到的是另一个列表中的一个列表,但有两条不同的路线。我的预期输出是单击房屋名称,并且应将另一个列表与成员一起添加到我的表中
预期产出
House Targaryen - Daenerys Targaryen
- Aegon Targaryen
ETC...
房屋路线https://anapioficeandfire.com/api/houses/378 人物路线https://anapioficeandfire.com/api/characters/33
@page "/fetchdata"
@using System.Text.Json.Serialization
@using System.Text.Json
@inject HttpClient Http
<h1>Game of Thrones</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (houses == null)
{
<p>
<em>Loading...</em>
</p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Houses</th>
</tr>
</thead>
<tbody>
@foreach (var house in houses.Take(5))
{
<tr>
<td>@house.Name</td>
@foreach (var character in house.SwornMembers.Take(5))
{
<td>
<tr>@character</tr>
</td>
}
</tr>
}
</tbody>
</table>
}
@code {
List<House> houses;
List<Character> characters;
protected override async Task OnInitializedAsync()
{
houses = await Http.GetFromJsonAsync<List<House>>("https://anapioficeandfire.com/api/houses/");
Console.WriteLine(houses);
}
public class House
{
public string Name { get; set; }
public List<Character> SwornMembers { get; set; }
}
public class Character
{
public string Name { get; set; }
public string Gender { get; set; }
public string Culture { get; set; }
public string Born { get; set; }
}
}
解决方案
通过快速浏览 api,您无法通过 ?id=1,2,3,4 之类的方式加载多个字符。
就像 timur 说的,你必须打一堆GetFromJSONAsync
电话。如果您查看 json 响应,则 SwornMembers 属性不是对象,而是您必须单独加载的 URL。在您的 House 课程中,更改List<Character>
为List<string>
然后创建一个接受 url 的 CharacterFromApi 组件。<CharacterFromApi URL="@character"/>
@foreach (var character in house.SwornMembers.Take(5))
{
<td>
<tr><CharacterFromApi URL="@character"/></tr>
</td>
}
//FYI the usings can be moved into the _Imports.razor file
@using System.Text.Json.Serialization
@using System.Text.Json
@inject HttpClient Http
<div>
@(Character?.Name)
</div>
@code {
[Parameter]
public string URL { get; set; }
Character Character { get; set; }
protected override async Task OnInitializedAsync()
{
Character = await Http.GetFromJsonAsync<Character>(URL);
}
public class Character
{
public string Name { get; set; }
public string Gender { get; set; }
public string Culture { get; set; }
public string Born { get; set; }
}
}
推荐阅读
- docker - 与 docker builder 阶段共享 go 模块
- typescript - 当比较 any 到 void 为什么类型是联合?
- linux-kernel - 硬件中断使用哪个堆栈?
- docker - 如何从 minikube 公开服务以便能够从同一网络中的另一台设备访问它?
- azure - 如何在 Pulumi Azure Native 中使用 TagAtScope 创建资源后添加标签
- r - 如何找到一列的总和?
- javascript - 在 React 客户端集成 websocket
- java-11 - 注册 Hibernate 5 事件监听器
- firebase - Flutter web app & firebase:不能在模块外使用 import 语句
- python - tensorflow dataset, tfds的数据加载中的数据增广,导致TypError或AttributeError