Первый подход
Создайте маршрут, который ловит действия:
routes.MapRoute(
"Catcher1",
"{action}",
new { controller = "Default", action = string.Empty });
Но это означает, что вам придется создать столько же действий контроллера на контроллере по умолчанию.
Второй подход
Если вы также хотите избежать этого и вместо этого иметь только один контроллер + действие, напишите маршрут следующим образом:
routes.MapRoute(
"Catcher2",
"{path}",
new { controller = "Default", action = "PageName", path = string.Emtpy },
new { path = @"[a-zA-Z0-9]+" });
Этот маршрут также определяет маршрутограничение, поэтому он будет ловить только те маршруты, которые на самом деле имеют что-то в первом сегменте маршрута.Вы можете определить это ограничение, чтобы перехватывать только те запросы, которые вам нужны (т.е. path = "Result|Search|Whatever"
)
, тогда ваш DefaultController
будет выглядеть примерно так:
public ActionResult PageName(string path)
{
// code goes here
}
Второй подход кажется оченьвыполнимо, но я бы не рекомендовал это, потому что вся логика должна проходить через это действие контроллера (для такого рода запросов).Было бы лучше разделить эти действия на логические.Те, которые на самом деле делают одно и то же (поэтому у них не было бы набора switch
операторов или аналогичных), будут определены с отдельными маршрутами (если они не могут быть выполнены с использованием одного).