Mvc,即时注册区域而不使用AreaRegistration

时间:2016-05-19 20:29:22

标签: asp.net-mvc routing asp.net-mvc-areas

我尝试创建一个适用于多个MVC项目的框架。我想将每个项目添加为一个区域。 我不能在每个项目中使用AreaRegistration,所以我尝试在我的代码中模拟区域:

foreach (var module in InstalledModules)
{
    routeCollection.MapRoute(
        name: "Default_" + module.AreaName,
        url: module.AreaName + "/{controller}/{action}/{id}",
        defaults: new { action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { module.Namespace }
    );
}

InstalledModules是包含区域名称Module1的所有模块的列表,以及MvcProject.Module1等模块程序集的根名称空间。上面的代码MapRoute所有已安装的模块,但它不起作用。对于所有请求首先注册的溃败命中和MVC尝试在错误的程序集(位置)中找到控制器。

有没有办法将项目组件注册为动态区域?

或者

如何自定义查找匹配路由方法?

2 个答案:

答案 0 :(得分:1)

您是否在命名空间中指定了Controllers?您的InstalledModules列表必须如下:

var InstalledModules = new List<InstalledModule>
{
    new InstalledModule() { AreaName = "Main", Namespace ="MainWeb.Controllers"},
    new InstalledModule() { AreaName = "Web1", Namespace = "WebApplication1.Controllers"},
    new InstalledModule() { AreaName = "Web2", Namespace = "WebApplication2.Controllers"},
};

答案 1 :(得分:0)

我发现了我的问题。路径收集始终包含默认路线。当我删除这一切时,每个工作都很好。