【问题标题】:ASP.NET MVC Areas routing not working with default routeASP.NET MVC 区域路由不适用于默认路由
【发布时间】:2012-04-06 12:14:56
【问题描述】:

我正在尝试将我的 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”方法的重载来注册此路由。

web 的我的 RegisterArea 函数是这样的

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

我该如何处理?

【问题讨论】:

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


    【解决方案1】:

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

    类似:

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

    【讨论】:

    • 是的,我尝试了很多以同时使用默认路由和区域。所以这应该是正确的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 2011-06-19
      • 2019-06-09
      相关资源
      最近更新 更多