2012-07-09 65 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天,發現它。

相關問題