Я работаю в устаревшей системе ASP.NET.Я говорю «наследие», потому что нет НИКАКИХ тестов около 90% системы.Я пытаюсь исправить маршруты в этом проекте и сталкиваюсь с проблемой, которую хочу решить с помощью общих маршрутов.
У меня есть следующие маршруты:
routes.MapRoute(
"DefaultWithPdn",
"{controller}/{action}/{pdn}",
new { controller = "", action = "Index", pdn = "" },
null
);
routes.MapRoute(
"DefaultWithClientId",
"{controller}/{action}/{clientId}",
new { controller = "", action = "index", clientid = "" },
null
);
Проблема в том, что первый маршрут перехватывает весь трафик для того, что мне нужно направить на второй маршрут.Маршрут является общим (контроллер не определен в ограничении в любом из определений маршрута), поскольку несколько контроллеров во всем приложении используют одну и ту же предпосылку (иногда нам нужен «pdn», иногда нам нужен «clientId»).
Как я могу сопоставить эти общие маршруты так, чтобы они шли к соответствующему контроллеру и действию, но не были ли они слишком жадными?Или я могу вообще?Являются ли эти маршруты слишком общими (и это то, во что я начинаю верить).
Моя единственная опция на данный момент (AFAIK) - одна из следующих:
В ограничениях примените регулярное выражение для соответствия значениям действия, таким как: (foo | bar | biz | bang)и то же самое для контроллера: (home | customer | products) для каждого контроллера.Однако проблема заключается в том, что мне, возможно, потребуется сделать следующее:
~ / Foo / Home / 123 // Должен отображаться в «DefaultwithPdn»
~ / Foo / Home /abc // Должен отображаться на «DefaultWithClientId»
Это означает, что если у контроллера Foo есть действие, которое принимает pdn, и другое действие, которое принимает clientId (что происходит в этом приложении все время), неправильный маршрут
Закрепление этих ограничений в каждом возможном комбо-контролере / действии мне кажется большим дублированием, и у меня такое ощущение, что я слишком долго смотрю на проблему, поэтому мне нужна еще одна параглаза, чтобы выручить.
Могу ли я иметь общие маршруты для обработки этого сценария?Или мне нужно иметь собственные маршруты для каждого контроллера с ограничениями, применяемыми к действиям на этих маршрутах?
Спасибо