55
66using Microsoft . AspNetCore . Components . Rendering ;
77using Microsoft . Extensions . Configuration ;
8+ using Microsoft . Extensions . Hosting ;
89using Microsoft . Extensions . Logging ;
910using System . Reflection ;
1011
@@ -31,6 +32,10 @@ class BootstrapBlazorErrorBoundary : ErrorBoundaryBase
3132 [ NotNull ]
3233 private NavigationManager ? NavigationManager { get ; set ; }
3334
35+ [ Inject ]
36+ [ NotNull ]
37+ private IHostEnvironment ? IHostEnvironment { get ; set ; }
38+
3439 /// <summary>
3540 /// 获得/设置 自定义错误处理回调方法
3641 /// </summary>
@@ -54,13 +59,10 @@ class BootstrapBlazorErrorBoundary : ErrorBoundaryBase
5459 /// <inheritdoc/>
5560 /// </summary>
5661 /// <param name="exception"></param>
57- protected override async Task OnErrorAsync ( Exception exception )
62+ protected override Task OnErrorAsync ( Exception exception )
5863 {
59- if ( ShowToast )
60- {
61- await ToastService . Error ( ToastTitle , exception . Message ) ;
62- }
6364 Logger . LogError ( exception , "{BootstrapBlazorErrorBoundary} {OnErrorAsync} log this error occurred at {Page}" , nameof ( BootstrapBlazorErrorBoundary ) , nameof ( OnErrorAsync ) , NavigationManager . Uri ) ;
65+ return Task . CompletedTask ;
6466 }
6567
6668 /// <summary>
@@ -69,13 +71,13 @@ protected override async Task OnErrorAsync(Exception exception)
6971 /// <param name="builder"></param>
7072 protected override void BuildRenderTree ( RenderTreeBuilder builder )
7173 {
74+ // 页面生命周期内异常直接调用这里
7275 var ex = CurrentException ?? _exception ;
7376 if ( ex != null )
7477 {
7578 // 处理自定义异常逻辑
7679 if ( OnErrorHandleAsync != null )
7780 {
78- // 页面生命周期内异常直接调用这里
7981 _ = OnErrorHandleAsync ( Logger , ex ) ;
8082 return ;
8183 }
@@ -132,7 +134,7 @@ private MarkupString GetErrorContentMarkupString(Exception ex)
132134 }
133135
134136 /// <summary>
135- /// 渲染异常信息方法
137+ /// BootstrapBlazor 组件导致异常渲染方法
136138 /// </summary>
137139 /// <param name="exception"></param>
138140 /// <param name="handler"></param>
@@ -145,14 +147,35 @@ public async Task RenderException(Exception exception, IHandlerException? handle
145147 return ;
146148 }
147149
150+ // 记录日志
151+ await OnErrorAsync ( exception ) ;
152+
148153 if ( handler != null )
149154 {
150- await handler . HandlerException ( exception , ExceptionContent ) ;
155+ if ( IHostEnvironment . IsDevelopment ( ) )
156+ {
157+ // IHandlerException 处理异常逻辑
158+ await handler . HandlerException ( exception , ExceptionContent ) ;
159+ }
160+ else
161+ {
162+ // 非开发模式下弹窗提示错误信息
163+ await ToastService . Error ( ToastTitle , exception . Message ) ;
164+ }
151165 return ;
152166 }
153167
154- await OnErrorAsync ( exception ) ;
168+ // 显示异常信息
169+ await ShowErrorToast ( exception ) ;
155170 _exception = exception ;
156171 StateHasChanged ( ) ;
157172 }
173+
174+ private async Task ShowErrorToast ( Exception exception )
175+ {
176+ if ( ShowToast )
177+ {
178+ await ToastService . Error ( ToastTitle , exception . Message ) ;
179+ }
180+ }
158181}
0 commit comments