Нет такой вещи, как «конфликтный» маршрут. В маршрутизации the first match wins, а остальные будут игнорироваться.
При использовании атрибутов Route
вы должны быть особенно осведомлены об этом поведении, потому что .NET attributes don't guarantee any order. Поэтому, когда у вас есть аналогичные маршруты, вы должны использовать атрибут Order
property для обеспечения того, чтобы в первую очередь выполнялся наиболее конкретный маршрут. Заказ обрабатывается от самого низкого до максимального.
[Route("a/b", Order = 1)]
[Route("a/{str}", Order = 2)]
Конечно, это происходит только в игру, когда маршруты похожи друг на друга и у вас есть один с заполнителем. Но вы должны всегда быть в курсе, когда вы добавляете маршрут с заполнителем что он может быть зарегистрированы до любых подобных маршрутов без заполнителя (что еще хуже, поведение может перехода от одной компиляции приложения к следующий), поэтому вы must установить заказ при использовании заполнителей.
Поскольку маршрут является значительным, довольно легко добавить маршрут в неправильном месте, что делает другие маршруты неработоспособными. Вы должны настроить route unit testing не только для обеспечения работы маршрутизации, но и для того, чтобы ваши маршруты продолжали работать, когда вы добавляете больше. Это даст вам «обнаружение», которое вы ищете, но, как я уже упоминал ранее, вы можете получить ложных срабатываний, используя этот подход, потому что порядок ваших атрибутов может меняться от одного компилятора к другому без свойства Order
,
Самый безопасный способ - проявлять бдительность в отношении использования имущества Order
, когда у вас есть заполнители.
Дополнительная информация:
Примечание: маршрутизации Конвенции на основе не меняет порядок от одного компиляцией к другому путь маршрутизации атрибутов. Если вам нужен жесткий контроль над порядком ваших маршрутов, вместо этого используйте маршрутизацию на основе условных обозначений.
Попробуйте сделать что-то вроде [Тестирование маршрутов в ASP.NET MVC] (http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx/) –