複数のルートを作成し、それらを適切な順序に保つ必要があります
// one route for Users
routes.MapRoute("Users",
"{username}/{action}/{id}",
new { controller = "Users", action = "Index", username = string.Empty, id = UrlParameter.Optional },
new { id = @"\d+" }
);
// one route for everything else
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional},
new { id = @"\d+" }
);
上記のように「本当に」簡単ではありませんが、それが要点です。ユーザー名を検証するには、 RouteConstraintも追加する必要があります。
最後に、ユーザー名パラメーターを使用している場合、なぜ ID が必要なのですか? ちょっとした考え。
余談
ですが、StackOverflow のユーザー セクションを見ると、ルーティングが次のようになっていることがわかります。
- users/{id}/{username}
- ユーザー/{id}/編集
- ユーザー/{id}/削除
個人的には、これを達成するための作業ははるかに少ないと言えます...しかし、それは私だけです。