【问题标题】:Nested asp.net mvc 3 application in IIS 7 with broken relative linksIIS 7 中的嵌套 asp.net mvc 3 应用程序,相关链接断开
【发布时间】:2013-09-26 00:42:58
【问题描述】:

我有两个 asp.net mvc 3 应用程序。其中一个应用程序的 URL 应该是这样的:www.my-app.com。第二个应用程序的 URL 应该是:www.my-app.com/my-second-app。

我的方法是在 IIS 7 中将第二个应用程序嵌套在第一个应用程序中。对于第一个应用程序,一切都运行良好。但是相对链接在第二个中不起作用。这是一个例子:

链接<a href="/sample-controller/sample-action/id">sample text</a> 将用户带到www.my-app.com/sample-controller/sample-action/id 而不是www.my-app.com/my-second-app/sample-controller/sample-action/id

我尝试在 href 属性的开头添加波浪号 (~)。但这会返回相对于视图所在文件夹的路径。

我也尝试过使用虚拟文件夹。

我想知道这是否是解决此任务的正确方法?如果是这样,有没有办法解决相对链接的问题?

【问题讨论】:

  • 为什么不使用 MVC 区域? (并且/path 在任何配置上都是根的绝对路径(与子文件夹/虚拟路径无关)。)
  • 子域将是一个理想的解决方案,子目录不是应用程序隔离的理想选择。
  • @BradChristie:不使用区域,因为应用程序是单独开发的。
  • @ChrisHardie:子域将是理想的。但在这种情况下,它不是一个选项。
  • @aspiring.algorist:您可以在父 mvc 应用程序中托管另一个 Web 应用程序作为区域。

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


【解决方案1】:

由于您无法选择子域,请执行以下操作:

  • 在您的站点中创建一个虚拟目录,并将其指向您的嵌套应用程序。

  • 当您在嵌套应用程序中需要 URL 时,您需要动态生成它,以便运行时为您正确解析它。

如果您要创建操作的 URL,请使用 ActionLink:@Html.ActionLink("Link Text", "sample-controller", "sample-action")

或者,您可以使用 URL 对象:<a href="@Url.Action("sample-controller", "sample-action")">My Link</a>

最后,如果您想指向不是控制器操作的资源,请使用波浪号正确解析您的应用程序路径:Url.Content("~/directory/page.html")

【讨论】:

  • 我知道,如果我更改所有链接以使用框架的 HTML 帮助程序,一切都会奏效。我试图避免的是浏览所有不使用帮助程序的链接并更新它们。我们还有使用 TagBuilder 构建的链接,这些链接必须更新。
  • 嗯,我想不出任何办法来解决它,如果你已经有硬编码的链接,当你移动你的应用程序时会失败。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2011-07-02
相关资源
最近更新 更多