【问题标题】:Relative Path tilde (~) not working in ASP.NET MVC 4相对路径波浪号 (~) 在 ASP.NET MVC 4 中不起作用
【发布时间】:2025-11-29 18:30:01
【问题描述】:

当我在我的机器上运行我的项目时,它在 http://localhost:53998/ 上运行,但是当我将它部署到 http://test.myserver.com/MyApp/ 时,所有链接都会中断。我使用的是相对路径波浪号 (~),所以导航链接类似于:

<a href="~/SomeCtrl/Index">Some Action</a>

在本地主机上,这工作正常(当 root 是 / 时),但是当我在 /MyApp/ 下部署我的项目时,它会将操作链接到 http://test.myserver.com/SomeCtrl/Index 而不是 http://test.myserver.com/MyApp/SomeCtrl/Index,所以我总是得到 404。

这不是波浪号 (~) 应该注意的吗?我在这里做错了吗?

编辑:

这可以正常工作:

@Html.ActionLink("Some Action", "Index", "SomeCtrl")

还有这个:

<a href="@Url.Action("Index", "SomeCtrl")">Some Action</a>

【问题讨论】:

  • 您是否尝试过使用@Url.Action("ActionName", "ControllerName")?例如@Url.Action("Index", "SomeCtrl")
  • 您也可以使用 @Html.ActionLink() 扩展方法和相同的参数(加上“链接文本”),这将为您生成链接的 HTML
  • 不知道,但这里可能有一个线索:*.com/questions/4563235/… - 看起来它使用了 Request.ApplicationPath - 也许它选择了错误的路径 - 或者你可能已经将你的应用程序定义为更高级别IIS 比你想要的站点根目录
  • 除了由框架处理的代码之外,您不能在任何东西中使用 tilda。如您所见,“某些操作”不起作用。 *.com/questions/3077558/…
  • @KenBrittain 这不是真的,MVC4 及更高版本会正确地将~ 处理成相对网址。您链接到的问题是在那之前的。

标签: asp.net-mvc-4 relative-path razor-2


【解决方案1】:

我遇到了类似的问题,我的答案是我有一些 URL 重写设置,这些设置正在更改波浪号路径以指向不同的文件夹。我必须理清这些重写规则,它解决了我的问题。

【讨论】: