Fix: Prevent overridden PageModel lifecycle methods from being discovered as handlers #64132
+49
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #63692
Problem
When developers override
PageModel
lifecycle methods (OnPageHandlerExecuting
,OnPageHandlerExecuted
,OnPageHandlerSelected
) in their Razor Pages, these overridden methods were being incorrectly discovered as page handlers. This resulted in them being parsed with unexpected HTTP methods and handler names:OnPageHandlerExecuting
→HttpMethod = "Page"
,HandlerName = "HandlerExecuting"
OnPageHandlerExecuted
→HttpMethod = "Page"
,HandlerName = "HandlerExecuted"
OnPageHandlerSelected
→HttpMethod = "Page"
,HandlerName = "HandlerSelected"
Root Cause
The
IsHandler()
method inDefaultPageApplicationModelPartsProvider
excluded methods declared directly onPageModel
using:However, when a developer overrides these methods in a derived class, the
DeclaringType
is the derived class, notPageModel
, causing the check to fail and allowing these lifecycle methods to be treated as handlers.Solution
Changed the exclusion check to use
GetBaseDefinition()
to trace back to the original method definition:This ensures that overridden lifecycle methods from
PageModel
are properly excluded from handler discovery.Testing
Added regression test
PopulateHandlerMethods_Ignores_OverriddenPageModelLifecycleMethods
that verifies:OnPageHandlerExecuting
,OnPageHandlerExecuted
,OnPageHandlerSelected
) are NOT discovered as handlersOnGet
continue to be discovered correctlyAll existing tests pass, confirming no behavioral changes for legitimate handler methods.
Original prompt
This pull request was created as a result of the following prompt from Copilot chat.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.