C#MVC将动态指定的路由重定向到固定操作
我使用的是C#MVC 我有一个动作看起来像这样C#MVC将动态指定的路由重定向到固定操作,c#,asp.net-mvc,routing,C#,Asp.net Mvc,Routing,我使用的是C#MVC 我有一个动作看起来像这样 public class CustomController : Controller { public ActionResult CustomPage(int customPageId) { var model = new CustomPageViewModel() { customPageId = customPageI
public class CustomController : Controller
{
public ActionResult CustomPage(int customPageId)
{
var model = new CustomPageViewModel()
{
customPageId = customPageId
};
return View(model);
}
}
我希望能够打这个动作,但使用不同的路线。例如,我希望Home/Index实际执行此操作,但要在URL中报告它的Home/Index
我的自定义页面存储在数据库中,该数据库告诉它要有什么路由,如何以编程方式为我的页面创建路由,并让MVC执行所需的操作
由于这是一个基于CMS的系统,我不想创建一个主/索引控制器和操作,因为用户可以选择他们想要的任何路线
谢谢,汤姆。仅供参考:我已经大致弄明白了。不幸的是,路由是在应用程序启动时定义的,因此如果我想在应用程序运行时设置新路由,我必须强制重新启动 这是我用来设置路线的代码,以防它对其他人有帮助
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
var pageList = new PageService().Get();
foreach (var page in pageList)
{
var targetRoute = string.Format("{1}/{2}", page.PageArea, page.PageController, page.PageAction);
if (!string.IsNullOrWhiteSpace(page.PageArea))
targetRoute = string.Format("{0}/{1}/{2}", page.PageArea, page.PageController, page.PageAction);
routes.MapRoute(
string.Format("PageBuilder_{0}", page.PageId),
targetRoute,
new { area = "Builder", controller = "Build", action = "Index", pageId = page.PageId }
);
}
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
仅供参考:我已经大致弄明白了。不幸的是,路由是在应用程序启动时定义的,因此如果我想在应用程序运行时设置新路由,我必须强制重新启动 这是我用来设置路线的代码,以防它对其他人有帮助
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
var pageList = new PageService().Get();
foreach (var page in pageList)
{
var targetRoute = string.Format("{1}/{2}", page.PageArea, page.PageController, page.PageAction);
if (!string.IsNullOrWhiteSpace(page.PageArea))
targetRoute = string.Format("{0}/{1}/{2}", page.PageArea, page.PageController, page.PageAction);
routes.MapRoute(
string.Format("PageBuilder_{0}", page.PageId),
targetRoute,
new { area = "Builder", controller = "Build", action = "Index", pageId = page.PageId }
);
}
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
更好的方法是在运行时使用一个或多个路由集合,而不是修改路由集合。更好的方法是在运行时使用一个或多个路由集合,而不是修改路由集合。