You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ErrorBoundary实现优雅错误处理?解决401跳转显示问题

解决方案

要实现捕获401异常后直接跳转、不显示ErrorContent,核心是处理完导航逻辑后重置ErrorBoundary的错误状态,具体实现如下:

  1. 注入导航服务:在自定义ErrorBoundary中注入NavigationManager,用于页面跳转
  2. 识别并处理401异常:在OnErrorAsync中判断异常类型为401时,先调用Recover()清除错误状态(避免渲染ErrorContent),再执行导航
  3. 保留其他异常处理逻辑:非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:15:31