【发布时间】: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