【问题标题】:Catch and display on the page any error in a .NET Maui Blazor project捕获并在页面上显示 .NET Maui Blazor 项目中的任何错误
【发布时间】:2021-12-02 10:51:32
【问题描述】:

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

ErrorBoundaries doc from Microsoft

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

步骤:

  • 创建一个新的 Blazor WebAssembly 项目
  • 创建组件CustomErrorBoundary.razor(见下面的代码)
  • 在 MainLayout.razor 中用组件 CustomErrorBoundary 包围 @Body 指令
  • 在 FetchData.razor 的代码中抛出异常(见下文)

自定义错误边界

    @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 项目。

步骤:

  • 创建一个新的 Blazor .NET Maui Blazor 项目
  • 将包 Microsoft.AspNetCore.Components.Web 添加到项目中(从 ErrorBoundary 中受益)
  • 重启 Visual Studio(非强制)
  • 创建组件CustomErrorBoundary.razor(见上面的代码)
  • 在 MainLayout.razor 中用组件 CustomErrorBoundary 包围 @Body 指令
  • 在 WeatherForecastService.cs 代码中抛出异常(见下文)

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

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

<ErrorBoundary>
    @Body
</ErrorBoundary>

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

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

【问题讨论】:

  • 我在使用 MudBlazor 时遇到了同样的问题,ErrorBoundary 不起作用
  • 我没有使用 MudBlazor,所以我无法为您提供帮助。您仍然可以在 Github (github.com/MudBlazor/MudBlazor/issues) 上报告该问题。

标签: asp.net-core blazor blazor-webassembly maui maui-blazor


【解决方案1】:

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

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

Code of ErrorBoundary

code of IErrorBoundaryLogger

我猜 Blazor Wasm 会默认实现这一点?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 2022-12-15
    • 2021-10-21
    • 2021-06-20
    • 1970-01-01
    • 2022-11-01
    • 2016-11-25
    • 2023-02-10
    相关资源
    最近更新 更多