我尝试创建一个适用于多个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尝试在错误的程序集(位置)中找到控制器。
有没有办法将项目组件注册为动态区域?
或者
如何自定义查找匹配路由方法?
答案 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)
我发现了我的问题。路径收集始终包含默认路线。当我删除这一切时,每个工作都很好。