Ответ 1
Ключ должен сначала указать более конкретные маршруты. Поэтому сначала поставьте "Книжный" маршрут. Изменить. Я думаю, вам также нужно ограничение, позволяющее только номерам соответствовать "id" части этого маршрута. Редактирование конца
routes.MapRoute(
name: "Book",
url: "books/{id}",
defaults: new { controller = "users", action = "Details" },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
И убедитесь, что параметр "id" в вашем действии "Подробности" является int:
// "users" controller
public ActionResult books(int id)
{
// ...
}
Таким образом, маршрут "Книги" не будет захватывать URL-адрес, например /users/create
(поскольку второй параметр указан как число), и поэтому он перейдет к следующему ( "по умолчанию" ) маршруту.