Вы соответствуете route1
, когда вы действительно хотите соответствовать route2
.
Чтобы добиться этого, используйте вместо этого маршрут и поставьте его перед route1
.
routes.MapRoute(
name: "route2",
url: "Records/{action}/{attId}/{atype}",
defaults: new { controller = "Records", action = "AttachmentDetails", id = UrlParameter.Optional }
);
Причина, по которой ваш код не работает, заключается в том, что маршруты соответствуют «сверху вниз» (то есть в порядке, в котором они определены). Используемый вами URL соответствует правилам для route1
до и соответствует правилам для route2
. Увы, route1
имеет разные имена параметров (libId
, а не attId
), и поэтому маршрутизация завершается ошибкой, поскольку вашему действию требуется параметр attId
, но ему дали параметр libId
.
Но если поставить вышеупомянутый маршрут первым , это будет означать, что он привыкнет, а не route1
. Также обратите внимание, что я жестко прописал Records
в маршруте, чтобы гарантировать, что URL-адреса, начинающиеся с Records
, обрабатываются route2
, а , все остальное обрабатывается route1
(или более поздними маршрутами). ).