1

我正在尝试将我的 MVC 项目分成多个区域。所以我有 3 个领域 1) crm 2) 服务 3) Web。我希望 PublicWeb 成为我的默认设置。这意味着它应该像 www.mysitename.com/mycontroller/myaction(中间没有区域名称)一样访问,而其他两个要使用区域名称(www.mysitename.com/crm/mycontroller/myaction)访问。我应该有什么路由/区域配置?我试过 AreaRegistration.RegisterAllAreas();了,它只适用于我的默认一个(网络)。当我访问另外 2 个时,它抛出了 404 错误。

我尝试像下面这样单独注册

        var area2reg = new crmAreaRegistration();
        var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes);
        area2reg.RegisterArea(area2context);

        var area1reg = new webAreaRegistration();
        var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes);
        area1reg.RegisterArea(area1context);

然后我的公共网络工作。但是当我访问我的论坛时,它抛出了这个错误,

找到了与名为“home”的控制器匹配的多种类型。如果为该请求提供服务的路由 ('crm/{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

我的 RegisterArea 函数web是这个

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "web_default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }

        );
    }

一个crm是这个

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "crm_default",
            "crm/{controller}/{action}/{id}",
            new { controller = "home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

我该如何处理?

4

2 回答 2

2

从我所看到的区域路线看起来不错。您是否更新了 Global.asax 中的默认路由以向 Web 区域发送请求?

就像是:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}",
            new { area = "web", controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

    }
于 2012-04-06T13:26:40.557 回答
1

我认为 Jonathan S 的解决方案绝对值得一试,但您可能会考虑另一种方法。那就是将您的web文件放在默认位置。当请求中没有区域时,路由引擎不会在区域中查找这些文件。

于 2012-04-06T14:05:13.327 回答