-
-
Notifications
You must be signed in to change notification settings - Fork 363
fix(BootstrapBlazorErrorBoundary): improve BuildRenderTree logic to render error or fallback content #6114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(BootstrapBlazorErrorBoundary): improve BuildRenderTree logic to render error or fallback content #6114
Conversation
…ender error or fallback content (dotnetcore#6113) - Only renders ChildContent when there is no exception. - Renders custom ErrorContent if provided, otherwise renders default error content.
Reviewer's GuideRefactors the BootstrapBlazorErrorBoundary to render child or error content based on exception presence and reset its state reliably, and extends sample components with a navigation demo and a new ErrorPage to verify global exception handling. Sequence Diagram: BootstrapBlazorErrorBoundary BuildRenderTree LogicsequenceDiagram
participant Caller
participant EBB as BootstrapBlazorErrorBoundary
participant Base as ErrorBoundaryBase
participant Handler as OnErrorHandleAsyncCallback
participant RTB as RenderTreeBuilder
Caller->>EBB: BuildRenderTree(rtb)
EBB->>Base: Get CurrentException value
alt Exception is present (CurrentException or _exception is not null)
opt OnErrorHandleAsync is configured
EBB->>Handler: Invoke(Logger, current_exception)
Handler-->>EBB:
end
EBB->>EBB: errorFragment = ExceptionContent(current_exception)
EBB->>RTB: AddContent(0, errorFragment)
EBB->>EBB: ResetException()
activate EBB
EBB->>EBB: _exception = null
EBB->>Base: Set CurrentException = null (via reflection)
deactivate EBB
else No Exception
EBB->>EBB: childFragment = ChildContent
EBB->>RTB: AddContent(0, childFragment)
end
Class Diagram: Updates to BootstrapBlazorErrorBoundary (Now Public)classDiagram
class ErrorBoundaryBase {
#CurrentException: Exception
}
BootstrapBlazorErrorBoundary --|> ErrorBoundaryBase
class BootstrapBlazorErrorBoundary {
+ChildContent: RenderFragment
+ErrorContent: RenderFragment~Exception~
+OnErrorHandleAsync: Func~ILogger, Exception, Task~
-_exception: Exception
-_currentExceptionPropertyInfo: PropertyInfo
#BuildRenderTree(RenderTreeBuilder builder): void
-ResetException(): void
-ExceptionContent(Exception ex): RenderFragment~Exception~
}
class RenderTreeBuilder {
}
BootstrapBlazorErrorBoundary ..> RenderTreeBuilder : uses
Class Diagram: Changes in GlobalException and New ErrorPageclassDiagram
class ComponentBase {
#OnInitialized(): void
}
GlobalException --|> ComponentBase
class GlobalException {
+NavigationManager: NavigationManager
+OnGotoPage(): Task
}
ErrorPage --|> ComponentBase
class ErrorPage {
#OnInitialized(): void
}
class NavigationManager {
+NavigateTo(string uri, bool forceLoad, bool replace)
}
GlobalException ..> NavigationManager : uses
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Thanks for your PR, @flyliononline. Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
|
@flyliononline please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by .NET Foundation and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant .NET Foundation, and those who receive the Submission directly b. Patent License. You grant .NET Foundation, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to .NET Foundation. You agree to notify .NET Foundation in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and .NET Foundation dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @flyliononline - I've reviewed your changes and they look great!
Here's what I looked at during the review
- 🟡 General issues: 1 issue found
- 🟢 Security: all looks good
- 🟢 Testing: all looks good
- 🟢 Complexity: all looks good
- 🟢 Documentation: all looks good
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
src/BootstrapBlazor/Components/ErrorLogger/BootstrapBlazorErrorBoundary.cs
Show resolved
Hide resolved
|
@microsoft-github-policy-service agree |
# Conflicts: # src/BootstrapBlazor/Components/ErrorLogger/BootstrapBlazorErrorBoundary.cs
Co-Authored-By: John <[email protected]>
…-blazor-error-boundary
|
@sourcery-ai review |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #6114 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 703 703
Lines 31048 31053 +5
Branches 4391 4392 +1
=========================================
+ Hits 31048 31053 +5 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @flyliononline - I've reviewed your changes - here's some feedback:
- Using reflection to clear the nonpublic CurrentException is brittle—consider exposing a protected reset method or leveraging the built-in ErrorBoundary state management instead of a private hack.
- Making BootstrapBlazorErrorBoundary public is a breaking API change; ensure this is intentional and that the new public surface is properly versioned and documented.
- Throwing an exception directly in ErrorPage.OnInitialized will crash the component on startup—wrap it in an ErrorBoundary or simulate the error in a more controlled context to avoid unintended app failures.
Here's what I looked at during the review
- 🟢 General issues: all looks good
- 🟢 Security: all looks good
- 🟢 Testing: all looks good
- 🟢 Complexity: all looks good
- 🟢 Documentation: all looks good
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
Link issues
fixes #6113
Summary By Copilot
Regression?
Risk
Verification
Packaging changes reviewed?
☑️ Self Check before Merge
Summary
Improve BuildRenderTree logic to render error or fallback content
Bug Fixes:
Enhancements:
Summary by Sourcery
Improve BootstrapBlazorErrorBoundary by refining BuildRenderTree logic to handle and clear exceptions correctly, and enhance the sample app with a new ErrorPage and navigation flow for testing global exception handling.
New Features:
Bug Fixes:
Enhancements: