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
PageModellifecycle 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 inDefaultPageApplicationModelPartsProviderexcluded methods declared directly onPageModelusing:However, when a developer overrides these methods in a derived class, the
DeclaringTypeis 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
PageModelare properly excluded from handler discovery.Testing
Added regression test
PopulateHandlerMethods_Ignores_OverriddenPageModelLifecycleMethodsthat verifies:OnPageHandlerExecuting,OnPageHandlerExecuted,OnPageHandlerSelected) are NOT discovered as handlersOnGetcontinue 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.