捕获并在页面上显示 .NET Maui Blazor 项目中的任何错误

Catch and display on the page any error in a .NET Maui Blazor project

出于测试目的,我想 'catch' 我的应用程序中发生的任何错误并将其显示在页面上(而不是在控制台中)。为此,我在 .Net 6 框架中发现了 ErrorBoundary 组件。

ErrorBoundaries doc from Microsoft

起初,我在 Bazor WebAssembly 项目中成功测试了这个组件。

步骤:

CustomErrorBoundary

    @inherits ErrorBoundary
    @if (CurrentException is null)
    {
        @ChildContent
    }
    else if (ErrorContent is not null)
    {
        @ErrorContent(CurrentException)
    }
    else
    {
        <div style="background-color: yellow; border: 2px dashed black; white-space: pre; font-family: consolas, monospace;">
            @foreach (var exception in receivedExceptions)
            {
                <div class="received-exception" style="background-color: rgba(255,255,255,0.3); margin: 0.5rem; padding: 0.5rem;">
                    @exception.Message
                </div>
            }
        </div>
    }

    @code {
        List<Exception> receivedExceptions = new();

        protected override Task OnErrorAsync(Exception exception)
        {
            receivedExceptions.Add(exception);
            return base.OnErrorAsync(exception);
        }

        public new void Recover()
        {
            receivedExceptions.Clear();
            base.Recover();
        }
    }

测试此应用程序并在 FetchData 中导航时,抛出错误并显示在页面上。

到目前为止一切顺利。现在我想做同样的事情,但这次是 .NET Maui Blazor 项目。

步骤:

不幸的是,项目在尝试启动时立即崩溃。

所以说得更简单:.NET Maui Blazor 项目似乎不支持 ErrorBoundary

<ErrorBoundary>
    @Body
</ErrorBoundary>

上面的简单代码在 Blazor Maui 中不起作用。

所以我不知道 ErrorBoundary 是否与 .NET Maui Blazor 兼容?如果没有,如何捕获 Blazor Maui 项目中的任何错误并将其显示在页面上?

尝试破译错误,乍一看,您继承的 ErrorBoudary 类型似乎需要一个未注入到您的 MAUI 项目中的依赖项。

我发现一个 post 似乎可以解释您的问题 Githubmemory on this issue 基本上,您需要实现接口,然后将新 class 注册为可用服务。

Code of ErrorBoundary

code of IErrorBoundaryLogger

我猜 Blazor Wasm 默认实现了这个?