.NET 6 Web API 和 Blazor 服务器应用程序之间的回调侦听器

Posted

技术标签:

【中文标题】.NET 6 Web API 和 Blazor 服务器应用程序之间的回调侦听器【英文标题】:Callback Listener Between .NET 6 Web API and Blazor Server App 【发布时间】:2021-12-29 15:09:57 【问题描述】:

我有一个后端 .NET 6 Web API RESTful 服务解决方案,它公开了一个由 Blazor 服务器应用程序使用的复杂类。每当后端 Web API 的实例化类更改值时,我需要将该更改的类传输到 Blazor 应用程序。目前,Blazor 应用程序按预期对后端服务进行所有调用。

我一直试图让 EventCallback 工作以克服这一挑战,但它不起作用。我找到的所有示例(例如 https://blazor-university.com/components/component-events/)都将它们的示例包含在同一个 Blazor 应用程序中。

有人可以指点我正确的方向吗?

谢谢!

【问题讨论】:

【参考方案1】:

EventCallback 是专门为在 Blazor 中使用而创建的结构。其目的是确定事件处理程序的委托类型。

您真正需要的是实时通知系统。最好通过 SignalR 实现。开始努力,让我们知道您的困难。

Start here

Here's 一个完整的 SignalR 工作代码示例,用于带有身份验证的 Blazor Server 应用程序。

然而,一个更简单的解决方案是创建一个实现 Timer 对象的服务,以给定的时间间隔查询数据库。

【讨论】:

首先感谢您的帮助!我花了一天的大部分时间试图让 SignalR 代码工作,但我失败了。然后,我采纳了您的第二个建议,并使用计时器和心跳 REST 调用将我的后端松散地耦合到前端事件(例如,一个位置的 Web API 到另一个位置的 Blazor 服务器端)。我现在面临的挑战是,当我得到更改时,等待 InvokeAsync(StateHasChanged) 调用不会从 Timer 事件中刷新屏幕。有什么想法吗? 不确定为什么 SignalR 应用程序无法为您工作。您只需下载应用程序(单击绿色代码按钮),然后将文件解压缩到选定的文件夹中。然后在 Visual Studio 中打开解决方案,编译应用程序... 由于 SignalR 应用程序采用 Microsoft 身份验证,您应该在包管理器控制台中执行命令 update-database 以创建数据库。现在运行应用程序...如果您想查看现在隐藏的聊天页面,您应该先注册然后登录。 登录后,聊天页面将可见。您现在可以通过打开具有相同 url 的新选项卡打开应用程序的新实例,或者打开不同的浏览器,例如 Edge,输入程序 url,然后开始与自己聊天。注意:创建这样一个程序所需的知识水平并非微不足道,所以不要绝望。至于您尝试使用 Timer 对象,我不能在没有看到最小可重现代码示例的情况下喃喃自语。我必须查看代码并对其进行检查。 我没有使用数据库 - 相反,我在一个服务器上运行一组后端 Web API 服务,这些服务正在为另一端的许多 Blazor 服务器应用程序提供服务。现在,无论我尝试什么,我都无法在 Blazor 组件上刷新 UI - 甚至剥离 SignalR 代码并只运行一个计时器。至于代码示例,它在自身上运行,而不是跨两个不同的项目,例如,它不提供任何帮助来创建双方的 HubConnections。

以上是关于.NET 6 Web API 和 Blazor 服务器应用程序之间的回调侦听器的主要内容,如果未能解决你的问题,请参考以下文章

Blazor ASP.Net Core 3.1 Web API 在发布时返回 404 错误

如何在 ASP .NET Core Web API 中映射回退,以便 Blazor WASM 应用程序仅拦截未发送到 API 的请求

ASP.NET Core Blazor编程系列一——综述

Angular、Vue、React、Web Components、Blazor、Javascript、jQuery和ASP.NET Framework,

CSS ::Deep Pseudo-Element 在 .NET 5 和 6 的 Blazor 中不起作用

JWT 不会通过 Blazor 存储在 ASP.NET Core 中