【问题标题】:Remove application name from url in ASP.NET MVC application从 ASP.NET MVC 应用程序中的 url 中删除应用程序名称
【发布时间】:2026-01-08 03:15:02
【问题描述】:

在我的开发环境中

Url.Action("Index", "User") ---> /user

在生产中,应用程序配置在名为“ucms”的应用程序下

Url.Action("Index", "User") ---> /ucms/User

我有基于 url 的授权,即 /user,所以它在生产环境中失败了。如何解决此问题以删除 ucms?

编辑 路由是默认的。仅供参考,我已将应用程序从 mvc 3.0 升级到 4.0。

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     
 routes.MapRoute(
                        "Default", // Route name
                        "{controller}/{action}/{id}", // URL with parameters
                        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

编辑 我已经想出了一种方法来做到这一点,任何人都可以分享一下这方面的想法。

将虚拟路径存储在 web.config 中。

   <add key="appvirtualpath" value="~/ucms"/>

在将 url 传递给数据库层时,我会将虚拟路径替换为空白。

Url.Action("Index","User").Replace(ConfigurationManager.AppSettings["appvirtualpath"].ToString(), "~");

【问题讨论】:

  • 你能发布你的路线配置吗?
  • 我对您在这里实际尝试做的事情感到有些困惑。您想在服务器上更改您的应用程序的网址吗?您想在开发环境中更改您的应用程序的网址吗?您想为每个生成正确的网址吗?这就是 Url.Action 已经做的......我真的不明白你的问题是什么。另外,仅供参考,它不是 ~/ucms/User 除非您配置错误,它是 ~/User = /ucms/User.. ~ 表示应用程序根相对,应用程序根是 /ucms。

标签: asp.net-mvc c#-4.0 asp.net-mvc-4


【解决方案1】:

我通过在开发环境中添加虚拟路径解决了这个问题

右键单击项目、属性、网络,然后单击虚拟路径。

不知道生产环境有没有办法配置

【讨论】:

  • 感谢您的回复。我正在寻找一个通用的,例如如果其他环境中的虚拟目录不同,则需要将数据库值再次更改为~/someothername/user。相反,它应该是数据库中的 ~/user 并且应用程序需要管理不同的配置。
  • 我很困惑你为什么会遇到问题。波浪号 (~) 表示“主目录”,对于托管在虚拟路径上的网站,它将转换为虚拟路径,在这种情况下为“/ucms”。这就是使用波浪号的全部意义所在。否则,您只需存储绝对路径。我在想,但是您实际上使用的是这个存储的值是问题所在,而不是存储的值。
  • @ChrisPratt,我很抱歉造成混乱。我已将数据表中的 url 存储为“~/user”以进行授权,site.map 检查 url 是否已在数据库中配置并相应显示。在生产中,由于它是“~/ucms/user”,所有菜单项都无法显示。我在想如果我在数据库中包含 ucms,如果再次更改配置,它可能会缺乏灵活性。所以,想让变量部分由数据库中的应用程序和控制器名/视图名管理。
  • 这就是我的观点。在生产中,您的 URL 不应该是“~/ucms/user”,而是“/ucms/user”。 “ucms”位是~ 应该被替换的虚拟路径。在开发中,您将没有虚拟路径,因此~ 被替换为 root(“/”),最终得到“/user”,而在生产中,它被替换为虚拟路径(“ucms”)和你最终得到“/ucms/user”。 ~ 的重点是使 URL 相对于站点的主 URL 起作用,不管那是什么。
  • @ChrisPratt,最好在数据库中有“~/user”然后使用“~”+Url.Action("Index","User").Replace("/ucms", "") 具有可在 web.config 中配置的 "/ucms" 值。有什么想法吗?