Ваш ответ на вопрос Ответ Дарина заставляет меня поверить, что у вас, вероятно, есть другой маршрут, который сопоставляется и используется вместо этого маршрута:
routes.MapRoute("person_id", "person/{unnecessaryinfo}-{id}",
new { controller = "Customer", action = "Details" },
new { id = @"[\d]{1,6}" });
Переключение порядка, в котороммаршруты, добавленные в RouteCollection
, должны решить проблему.Более конкретные маршруты должны быть первыми добавлены в коллекцию.Например, если у вас также есть этот маршрут:
routes.MapRoute("person_login", "person/{id}",
new { controller = "Customer", action = "Details" });
Он должен появиться после вашего более конкретного маршрута "person_id", чтобы ваш код выглядел следующим образом:
routes.MapRoute("person_id", "person/{unnecessaryinfo}-{id}",
new { controller = "Customer", action = "Details" },
new { id = @"[\d]{1,6}" });
routes.MapRoute("person_login", "person/{id}",
new { controller = "Customer", action = "Details" });
URL, который вы указали'http://example.com/Person/unnecessaryinfo-42'
будет соответствовать обоим маршрутам, но так как ваш более конкретный маршрут появляется первым, именно этот маршрут будет использоваться.Когда сопоставляется менее конкретный URL-адрес, он не будет соответствовать первому, и поэтому будет использоваться второй маршрут.
При этом определение того, каким маршрутам соответствует URL-адрес, может быть немного сложным.К счастью, есть два довольно хороших варианта, которые помогают с отладкой маршрута:
Решение Стивена, вероятно, является лучшим для долгосрочного использования, но Фил определеннолегче реализовать для отладки и грязной отладки.Я бы начал с изменения порядка маршрутов, но если это не решит проблему, воспользуйтесь одним из вышеупомянутых отладчиков.