Fix bug in attribute convention route values #2368
Merged
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.
Issues
Fixes #2363
Description
Briefly describe the changes of this pull request.
Some background
Routing conventions that add values from the url to the routing convention store also keep track of the number of values added (by using the
IncrementKeyCount
helper method). The action selector uses this information to match the controller action with the correct number of parameters (amongst many overloads).Current issue
The
AttributeRoutingConvention
adds values to routing convention store directly without using existing helper methods and did not increment the key count. This misleads the action selector to behave as if there were not keys in the url and consequently picks theGet()
action without parameters over theGet(int key)
action. TheAttributeRoutingConvention
also had an additional bug that caused it to add extra key-value pairs to the routing store, because eachODataRoute
template it tried to match could insert values to the store, even if that template would not end up matching the path.This PR fixes those issues by incrementing the key count for each value added to the convention store and clearing the values left over by route templates that did not match the current odata path.
Checklist (Uncheck if it is not completed)
Additional work necessary
If documentation update is needed, please add "Docs Needed" label to the issue and provide details about the required document change in the issue.