Ну, самым простым способом было бы иметь идентификатор где-то в URL (обычно первый вариант)
routes.MapRoute(
"SEORoute", // Route name
"{id}/{*seostuff}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional, seostuff = UrlParameter.Optional } // Parameter defaults
);
В вашем контроллере у вас будет что-то вроде
public class HomeController {
public ActionResult Index(int id) {
//check database for id
if(id_exists) {
return new RedirectResult("whereever you want to redirect", true);
} else {
return new HttpNotFoundResult();
}
}
}
Если вы не хотите использовать метод id, вы можете сделать что-то еще, как ...
routes.MapRoute(
"SEORoute", // Route name
"{category}/{page_name}", // URL with parameters
new { controller = "Home", action = "Index", category = UrlParameter.Optional, pagename = UrlParameter.Optional } // Parameter defaults
);
public ActionResult Index(string category, string page_name) {
//same as before but instead of looking for id look for pagename
}
Проблема с последним заключается в том, что вам нужно будет учитывать все типы маршрутов, и это может быть очень сложно, если у вас много параметров, соответствующих различным типам.
Это должно привести вас в правильном направлении. Если вам нужны пояснения, дайте мне знать, и я посмотрю, смогу ли я написать конкретный маршрут, чтобы помочь вам
Дополнительно
Возможно, вы могли бы сделать то, что вы ищете, как
public ActionResult Index() {
//Create and instance of the new controlle ryou want to handle this request
SomeController controller = new SomeController();
controller.ControllerContext = this.ControllerContext;
return controller.YourControllerAction();
}
но я не знаю никаких побочных эффектов от этого ... так что это, вероятно, не очень хорошая идея - но, похоже, работает.