【问题标题】:C# MVC Redirect a dynamically specified route to a fixed actionC# MVC 将动态指定的路由重定向到固定操作
【发布时间】:2016-07-08 17:46:59
【问题描述】:

我正在使用 C# MVC。

我有一个看起来像这样的动作。

    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 的系统,我不想创建 Home/Index 控制器和操作,因为用户可以选择他们想要的任何路线。

谢谢,汤姆

【问题讨论】:

    标签: c# asp.net-mvc routing


    【解决方案1】:

    仅供参考:我已经想通了。不幸的是,路由是在应用程序启动时定义的,所以如果我想在应用程序运行时设置新路由,我必须强制重启......

    这是我用来设置路线的代码,以防它帮助其他人。

        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 }
            );
        }
    

    【讨论】:

    • 一个更好的主意是使用一个或多个data-driven routes,而不是在运行时修改路由集合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多