Blazor WebAssembly - 浏览器关闭时处理不会触发

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 集线器的连接。

Luc*_*ain 1

Blazor WebAssembly 文档中提到了调试时无法命中断点的原因:

目前,您不能:

  • 中断未处理的异常。
  • 在调试代理运行之前在应用程序启动期间命中断点。这包括 Program.cs 中的断点以及应用程序请求的第一个页面加载的组件的 OnInitialized{Async} 生命周期方法中的断点。
  • 在非本地场景中进行调试(例如,Windows Subsystem for Linux (WSL) 或 Visual Studio Codespaces)。
  • 在调试期间自动重建托管 Blazor WebAssembly 解决方案的后端服务器应用程序,例如通过使用 dotnet watch run 运行应用程序。

我猜组件处置是其中一种情况,尽管没有提到。

在这些场景中,我所做的只是使用记录器记录一些行或添加一些行Console.WriteLine(...),然后使用浏览器中的 F12 工具控制台来查看它们是否被命中。

注意:这适用于在整个 Blazor 站点中导航时的组件。正如其他成员所指出的,如果您关闭浏览器窗口,您将无法在 F12 工具中看到任何内容,因为它会自动关闭。