具有命名空间和区域的路由仍然抱怨多个控制器名称

问题描述 投票:1回答:2

我有一个Sitecore MVC项目的文件夹结构:

Areas
-- Common
   -- Controllers
      -- HeaderController
   -- Models
   -- Views
-- Legal
   -- Controllers
      -- HeaderController
   -- Models
   -- Views

我试图从代码中调用一个控制器,我正在传递PageContent.Current.RequestContext,并用适当的命名空间和区域填充它。

if (!String.IsNullOrWhiteSpace(Area))
            {
                PageContext.Current.RequestContext.RouteData.DataTokens["area"] = this.Area;
            }

            if (!String.IsNullOrWhiteSpace(AreaNameSpace))
            {
                PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = this.AreaNameSpace;
            }
            return ControllerBuilder.Current.GetControllerFactory().CreateController(PageContext.Current.RequestContext, this.ControllerName);
        }

但它仍然抱怨通常的错误:

Multiple types were found that match the controller named 'Header'.

我为每个区域设置了路由,并且这些区域都已在routeconfig.cs中的app_start中注册。

可能是什么问题?这甚至可能吗?

c# asp.net-mvc sitecore asp.net-mvc-routing sitecore8
2个回答
0
投票

对于我的情况,解决方案是在MVC 5而不是使用

PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = this.AreaNameSpace;

您必须将名称空间定义为IEnumerable <string>

PageContext.Current.RequestContext.RouteData.DataTokens["Namespaces"] = new string[] { this.AreaNameSpace };

请参阅Peterasp.net mvc Find Controller By Name With Area的评论。


-3
投票

您必须将默认路由配置为:

routes.MapRoute(
    "Default",                                              
    "{controller}/{action}/{id}",                           
    new { controller = "Home", action = "Index", id = "" }, 
    new[]{"<namespace of you main controller (HeaderContriller)>"}                       
  );

你可以在这里参考我的文章:http://www.c-sharpcorner.com/UploadFile/56fb14/working-with-routes-in-mvc-framework/

© www.soinside.com 2019 - 2024. All rights reserved.