1

我有一个分为多个区域的 MVC 3 解决方案。例如,我可以通过以下方式访问应用程序://myapp/ 或 //myapp/external 或 //myapp/internal。我在 IIS 7 中尝试完成的是将默认 URL(在我的情况下为 //myapp)设置为 //myapp/internal。

因此,无论何时有人导航到 //myapp,他们都会被重定向到 //maypp/internal(internal 是我在 MVC 中设置的区域的名称)。

我真的在寻找一种在服务器上而不是在 global.asax 中执行此操作的方法。原因是因为这个应用程序将在多个服务器上,我不想在每次需要部署我的应用程序时都更改默认路由。

谢谢您的帮助。

4

2 回答 2

0

最简单的方法是在 //myapp/ 处创建一个默认控制器,该控制器 301 是 //myapp/internal 的用户。总会有人键入 mydomain.com 并突然一无所获。

或者,在主 Global.asax.cs 中创建一个匹配空白的特定路由,并路由到指定的控制器、操作和区域。不过,这几乎颠覆了“区域完全独立”的概念。

于 2012-05-29T19:30:41.657 回答
0

我最终通过以下方式解决了我的问题:

一种。在我的 Web.Internal.config 文件中,我添加了这个转换:

<appSettings>
    <add key="Environment" value="Production Internal(Live)" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>         

现在,当我将解决方案部署到内部站点时,Web.config 中的 Environment 值被“Production Internal(Live)”覆盖

湾。然后,我在默认控制器中添加了一个检查,并在 Web.config 中查找环境值的操作

var InternalorExternalSite = Convert.ToString(ConfigurationManager.AppSettings["Environment"]);

if (InternalorExternalSite == "Production Internal(Live)")
    {
        return RedirectToAction("", "", new { area = "Internal" });
    }

在我的情况下,上面的代码将检查环境值是否等于“Production Internal(Live)”,并将请求重定向到“Internal”区域。

现在,当内部用户导航到http://www.internalsite.com时,他们将被重定向到区域http://www.internalsite.com/internal

当外部用户导航到http://www.externalsite.com时,他们不会被重定向到任何区域,但如果您需要,您可以根据上述内容将用户重定向到任何区域。

于 2012-07-11T18:09:17.807 回答