如何用ErrorBoundary实现优雅错误处理?解决401跳转显示问题
解决方案
要实现捕获401异常后直接跳转、不显示ErrorContent,核心是处理完导航逻辑后重置ErrorBoundary的错误状态,具体实现如下:
- 注入导航服务:在自定义ErrorBoundary中注入
NavigationManager,用于页面跳转 - 识别并处理401异常:在
OnErrorAsync中判断异常类型为401时,先调用Recover()清除错误状态(避免渲染ErrorContent),再执行导航 - 保留其他异常处理逻辑:非401的异常仍走原有流程,显示通用错误提示
完整的CustomErrorBoundary代码示例:
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using System.Net; public class CustomErrorBoundary : ErrorBoundary { [Inject] private NavigationManager NavigationManager { get; set; } = default!; protected override async Task OnErrorAsync(Exception exception) { if (exception is HttpRequestException requestException && requestException.StatusCode == HttpStatusCode.Unauthorized) { // 重置错误状态,阻止ErrorContent模板渲染 Recover(); // 跳转到自定义无权限页面 await InvokeAsync(() => NavigationManager.NavigateTo("/notauthorized")); return; } // 其他异常沿用默认逻辑,显示ErrorContent await base.OnErrorAsync(exception); } }
关键说明
Recover()是ErrorBoundary的内置方法,调用后会将组件从错误状态恢复至正常状态,这是避免显示通用错误提示的核心操作- Blazor Server环境下,导航操作需用
InvokeAsync包裹,确保在UI线程执行 - 这种方式实现了401异常的集中处理,无需在每个API调用中重复编写权限判断逻辑
内容的提问来源于stack exchange,提问作者Goran
相关产品推荐
相关产品推荐

