jon*_*dow 6 c# asp.net blazor .net-5 blazor-webassembly
我有 blazor 应用程序在 .NET 5 版本 5.0.3 上运行 WASM(不是服务器)。我希望能够检测用户何时离开网站或关闭浏览器。处置似乎仅在应用程序本身内导航时触发(即页面或控件由于导航而处置)。
这是我的页面标记,我也尝试实现 IAsyncDisposable 并得到相同的结果:
@page "/"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
@inject NavigationManager NavigationManager
@inject IHubManager HubManager
@implements IDisposable
<Tabs />
@code{
public void Dispose()
{
_ = HubManager.DisposeAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
根据我在这里阅读的一些帖子,这种方法在使用 blazor 的服务器版本时有效,任何人都可以告诉我是否需要与 WASM 一起使用另一种方法?
目标是能够在用户离开站点时关闭/处置与我的 signalR 集线器的连接。
Blazor WebAssembly 文档中提到了调试时无法命中断点的原因:
目前,您不能:
- 中断未处理的异常。
- 在调试代理运行之前在应用程序启动期间命中断点。这包括 Program.cs 中的断点以及应用程序请求的第一个页面加载的组件的 OnInitialized{Async} 生命周期方法中的断点。
- 在非本地场景中进行调试(例如,Windows Subsystem for Linux (WSL) 或 Visual Studio Codespaces)。
- 在调试期间自动重建托管 Blazor WebAssembly 解决方案的后端服务器应用程序,例如通过使用 dotnet watch run 运行应用程序。
我猜组件处置是其中一种情况,尽管没有提到。
在这些场景中,我所做的只是使用记录器记录一些行或添加一些行Console.WriteLine(...),然后使用浏览器中的 F12 工具控制台来查看它们是否被命中。
注意:这适用于在整个 Blazor 站点中导航时的组件。正如其他成员所指出的,如果您关闭浏览器窗口,您将无法在 F12 工具中看到任何内容,因为它会自动关闭。