使用<ErrorBoundary>后,Error.cshtml是否仍会显示?
Blazor Server中Error.cshtml与ErrorBoundary的触发区别
首先明确:
各自的触发时机
- ErrorBoundary的
:负责捕获Blazor组件渲染/运行过程中的未处理异常,比如组件生命周期方法出错、按钮点击事件里的异常、子组件渲染失败等。只要你的组件树被这个ErrorBoundary包裹(比如MainLayout作为根布局,包裹了绝大多数页面组件),这类组件层级的异常都会被拦截,显示你自定义的 内容。 - Error.cshtml:这是ASP.NET Core层面的兜底错误页面,触发场景是Blazor框架无法处理的致命/全局异常,比如:
- Blazor应用启动阶段的致命错误(比如Program.cs里依赖注入配置错误、服务注册失败,导致Blazor服务器无法初始化)
- 非Blazor组件层面的请求错误(比如访问不存在的路由地址、静态资源加载失败,且未配置Blazor的404处理)
- Blazor SignalR连接彻底中断且无法自动恢复的极端情况
- 未被任何ErrorBoundary捕获的顶级全局异常(这种场景极少)
为什么你没见过Error.cshtml?
日常开发中遇到的大多是组件内部的业务逻辑或渲染错误,这些都被MainLayout里的ErrorBoundary接住了,自然看不到Error.cshtml。但它作为最后一道防线,在Blazor自身崩溃时依然会生效。
验证Error.cshtml的触发方法
可以通过以下方式快速触发:
- 在
Program.cs里故意写个错误,比如注册一个不存在的服务:
启动应用时就会直接跳转到Error.cshtml。builder.Services.AddSingleton<IMyService, NonExistentService>(); - 在浏览器地址栏输入一个完全不存在的路由(比如
/random-404-path),如果你的Blazor应用没配置自定义404组件,就会触发Error.cshtml。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

