I believe the issue here is that a request for api/v1/user
is matched by the 1st route in the route table.(Note: route matching happens first where it doesn't consider query parameters and then action matching happens) Now, the 1st route in the route table could be reflection order based on which attribute routing is adding the actions to it. (you can check how the route table GlobalConfiguration.Configuration.Routes
entries look like).
Attribute routing adds routes by assigning action
variable the value of the action name. Web API's action selection has logic where if it sees that the action
variable is assigned, it will try to look for the best matching action among list of actions with this same name (action overloading scenario like yours).
You can try the following:
Have same action name for both methods above by using
ActionName
attribute.if 1. doesn't make sense, you could probably have different route temmplate for the actions.