出于测试目的,我想“捕获”我的应用程序中发生的任何错误并将其显示在页面上(而不是在控制台中)。为此,我在 .Net 6 框架中发现了ErrorBoundary组件。
Microsoft 的 ErrorBoundaries 文档
起初,我在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 中抛出异常的代码(见下文)
不幸的是,该项目在尝试启动时立即崩溃。
所以说得更简单:.NET Maui Blazor 项目似乎不支持 ErrorBoundary。
<ErrorBoundary>
@Body
</ErrorBoundary>
上面的简单代码在 Blazor Maui 中不起作用。
所以我不知道ErrorBoundary是否与 .NET Maui Blazor 兼容?如果没有,如何捕获 Blazor Maui 项目中的任何错误并将其显示在页面上?