if I call this url mysite.com/archive/2009 this works because the action expecting parameter with a name "year" and the first route schema works with this request. But if I call this url mysite.com/member/john it will result in this url mysite.com/member?id=john
So it looks like if my first route in global.asax have the same construction but different parameter name, the one with the right parameter name will have the right url (mysite.com/archive/2009) but for the other won't. How can I solve this issue? I can change the route table to expect a generic parameter name like "param", but I need to change all the signature of the action to "param" as well and it is not very descriptive (param instead year or param instead id).

You are allowed to use literals in the second parameter, and they will act as filters. The more specific your route is, the closer you need to put it to the top of the route configuration, the routing system will choose the first route that matches.

Here is a link to more detailed background information. Some of the syntax has changed since the article was written but the basic rules seem up to date.

again it is confusing, I would use ID for Member not Year.
–
dritterwegFeb 23 '10 at 20:23

Sorry about that, made an edit. The main point is that you need to specify that action in the route, so that the routing class can identify which route to use. In addition it uses the first route that matches, so you need to put the more specific route first.
–
Jim CountsFeb 23 '10 at 20:29