这种情况通常是因为Blazor无法在JavaScript API中取消WebAssembly模块加载器。
以下是通过在Blazor应用程序中添加代码来解决此问题的步骤:
1.创建一个组件类,如NavAwayPrompt:
public class NavAwayPrompt : ComponentBase { [Inject] private HttpClient Http { get; set; }
protected override void OnInitialized()
{
Http.Interceptors.Add(new ClientInterceptor(this));
}
private class ClientInterceptor : IHttpInterceptor
{
private readonly NavAwayPrompt _component;
public ClientInterceptor(NavAwayPrompt component)
{
_component = component;
}
public Task InterceptAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Get)
{
_component.InvokeAsync(() => _component.CancelLoad()).Wait();
}
return Task.CompletedTask;
}
}
public async Task CancelLoad()
{
await JSRuntime.InvokeVoidAsync("Blazor.stopLoading");
}
}
2.在每个应用程序登录到的页面上包含该组件:
3.最后,您需要将Blazor.stopLoading JavaScript函数添加到您的Blazor应用程序中,它将停止加载器并清除任何无用的资源:
// In your Blazor app's JavaScript!
window.Blazor = { stopLoading: function () { if (window.Blazor.modules) { if (window.Blazor.modules["dotnet"]) { return window.Blazor.modules["dotnet"].unload(); } }
if (window.WebAssembly) {
WebAssembly.Module.exports["mono_wasm_cache_clear"]();
}
}
}
这样,当用户从页面导航离开时,Blazor就不会抛出异常了。