MVC3 - Controller从Root返回视图,而不是从Area返回视图

时间:2012-07-09 04:49:50

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

我正在尝试实现多租户MVC3应用程序。包括子域请求在内的所有url请求都将定向到主应用程序。解决方案是使用默认主控制器和名为“客户端”的区域。所以有2条路线。

在客户区域中

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

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

1 个答案:

答案 0 :(得分:0)

检查您是否将虚拟路径映射为区域名称。我在visual studio中设置区域地址只是为了调试,它让我创建一个虚拟路径。所以AppRelativeCurrentExecutionFilePath总是〜/并且路由无法确定区域。对于IIS express,删除站点的虚拟路径:

C:\ Users \用户名\文件\ IISExpress \配置\对ApplicationHost.config

我花了4天的时间来发现它。