如何在 blazor 服务器端关闭页面时获取事件?

How can I get the event while page close in blazor server-side?

我正在通过 blazor 服务器端制作一个聊天室应用程序。

我想显示每个用户的在线状态

现在我可以使用 OnAfterRenderAsync 事件让用户进入页面。

Blazor 生命周期中似乎没有任何 exit 事件通过 https://docs.microsoft.com/en-us/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1

有人说我可以使用 Dispose 事件来实现它,而它确实有效。

还有一个疯狂的想法就是利用js的window.onbeforeunload事件调用blazor方法

我不知道哪个最好。你能给我一个建议吗?谢谢。

您应该为此在服务器上实施 CircuitHandler

您可以在此处找到文档 https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.server.circuits.circuithandler?view=aspnetcore-3.1

它使您能够对 Circuit 的生命周期事件做出反应,这是 Blazor 服务器连接的 backbone。

方法

OnCircuitClosedAsync(电路,CancellationToken)
丢弃新电路时调用。

OnCircuitOpenedAsync(电路,CancellationToken)
建立新电路时调用。

OnConnectionDownAsync(电路,CancellationToken)
当与客户端的连接断开时调用。

OnConnectionUpAsync(电路,CancellationToken) 在建立与客户端的连接时调用。 - 此方法最初在 OnCircuitOpenedAsync(Circuit, CancellationToken) 之后执行一次,并且在电路的生命周期内每次重新连接时执行一次。