2012-07-09 66 views
2

我试图实现一个多租户MVC3应用程序。包括子域请求在内的所有url请求都被定向到主应用程序。解决方案具有默认的主控制器和一个名为“客户端”的区域。所以有2条路线。MVC3 - 控制器从根区而不是从区域返回视图

上的clientarea

context.MapRoute(
      "Client_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }, 
      new {controller = new ClientAreaConstraint()}, 
      new[] { "MainApp.UI.Areas.Clients.Controllers" }); 

这在全球ASAX

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }, 
      new[] { "MainApp.UI.Controllers" } 
     ); 

一个用于区域和一个主一个

此。在该区域的路由中,我添加了一个路由约束,该约束检查url是否具有子域名,如果是,则返回true。

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     var url = httpContext.Request.Headers["HOST"]; 
     var clientName = url.Split('.')[1]; 
     return clientName != "mainsite"; 
    } 

这工作和区域控制器正在获取子域请求。但是当我尝试调用返回视图()。它在主文件夹中查找视图,而不在区域文件夹中查找。 我的网址看起来像这样 http://www.client.mainsite.com/并且它没有区域名称。是因为那个吗? 可能是什么问题?请帮助

+1

发现问题,我在开发过程中重命名了Area名称。我重命名了文件夹和类名。但未能在区域注册文件中重命名“Areaname”,导致从根目录中选取回退和视图。在根中我有一个相同的控制器和相同的视图文件夹 – 2012-07-09 07:03:42

回答

0

检查您是否将虚拟路径映射为区域名称。我在Visual Studio中设置区域地址只是为了调试,并要求我创建一个虚拟路径。所以AppRelativeCurrentExecutionFilePath总是〜/并且路由不能确定该区域。对于IIS表达删除网站的虚拟路径:

C:\ Users \用户名\文档\ IISExpress \ CONFIG \对ApplicationHost.config

我花了4天,发现它。

相关问题