【发布时间】:2020-09-13 02:03:18
【问题描述】:
我编写了一个服务器端 Blazor 应用程序。您可以使用用于报告新状态的小 API 创建具有状态(良好、警告、错误...)的传感器。
现在,如果调用 API,我想从数据库中重新获取 blazor 客户端上的新状态(或所有传感器)。
我尝试应用本指南中的“3. State Container”:https://chrissainty.com/3-ways-to-communicate-between-components-in-blazor/
如何在 API 请求后强制网站重新获取传感器? Sensor 和 Blazor 客户端是不同的设备。
@inject ISensorData _db
<h1>Dashboard</h1>
@if (sensors is null)
{
<p>Laden...</p>
}
else
{
if (sensors.Count == 0)
{
<p>Keine Sensoren vorhanden!</p>
}
else
{
foreach (SensorModel sensor in sensors)
{
<button class="btn btn-lg @StatusColor(sensor.Status) m-2">@sensor.Name @sensor.Message</button>
}
}
}
@code {
private List<SensorModel> sensors;
protected override async Task OnInitializedAsync()
{
sensors = await _db.GetSensors();
}
private string StatusColor(int status)
{
switch (status)
{
case 0:
return "btn-secondary";
case 1:
return "btn-success";
case 2:
return "btn-warning";
case 3:
return "btn-danger";
default:
return "btn-secondary";
}
}
}
我的 API
[HttpGet("updateState")]
public async Task<IActionResult> UpdateState(int id, int status, string? message)
{
if (id <= 0)
{
return BadRequest();
}
if (string.IsNullOrEmpty(message))
{
message = "";
}
try
{
await _db.UpdateState(id, status, message);
//Task.Run(async () => { _dbState.CallRequestRefresh(); });
_dbState.CallRequestRefresh();
}
catch(Exception ex)
{
throw ex;
}
return NoContent();
} enter code here
我的 API 控制器
{
_db = db;
NavigationManager = navigationManager;
hubConnection = new HubConnectionBuilder()
.WithUrl("https://localhost:44346/dbRefreshHub")
.Build();
hubConnection.StartAsync();
}
【问题讨论】:
-
调用了哪个API?我不明白这个问题。
-
@HenkHolterman 我添加了我的 API 截图。此获取请求工作正常。 enet 的答案是正确的方向。