如何添加根级路由(不在区域中)

时间:2018-06-25 01:50:37

标签: asp.net-mvc asp.net-mvc-5 orchardcms orchard-modules

在此处(和CMS的一般情况下)完成到Orchard的菜鸟操作,因此请更正我可能有的任何误解。我有一个现有站点,正在尝试将其改编为Orchard模块。目标基本上是与以前相同的网站,但所有者可以通过Orchard GUI添加自己的博客文章页面。

此网站即模块(我称为SiteModule)需要在应用程序的根级具有路由,以使其看起来像“我的网站+ CMS”,而不是“一个CMS +我的网站”。

如何在SiteModule中构建路由,使它们位于应用程序的根目录中,而不是默认位于专用的/SiteModule区域中?

1 个答案:

答案 0 :(得分:0)

您可能会猜到它是默认设置,以防止模块互相踩踏,但是您可以轻松添加自己的路线。此代码假定模块中有两个控制器,分别称为Home和Default。在您的SiteModule项目的路径中创建一个Routes.cs文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.Mvc.Routes;

namespace SiteModule {
    public class Routes : IRouteProvider {
        public void GetRoutes(ICollection<RouteDescriptor> routes) {
            foreach (var routeDescriptor in GetRoutes())
                routes.Add(routeDescriptor);
        }

        public IEnumerable<RouteDescriptor> GetRoutes() {
            return new[] {
                new RouteDescriptor {
                    Priority = 5,
                    Route = new Route(
                        "Home/{action}",
                        new RouteValueDictionary {
                            {"area", "SiteModule"},
                            {"controller", "Home"},
                            {"action", "Index"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "SiteModule"}
                        },
                        new MvcRouteHandler())
                },
                new RouteDescriptor {
                    Priority = 5,
                    Route = new Route(
                        "Default/{action}",
                        new RouteValueDictionary {
                            {"area", "SiteModule"},
                            {"controller", "Home"},
                            {"action", "Gogo"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "SiteModule"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }
}

我猜只是要注意,您并没有覆盖Orchard的默认路由:)