Первый подход
Создайте маршрут, который перехватывает действия:
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
или чего-то подобного), должны быть определены с отдельными маршрутами (если их нельзя было сделать с помощью одного).
person
Robert Koritnik
schedule
07.02.2010