从 ASP.NET MVC 中框架生成的 URL 中删除子文件夹?

Remove subfolder from framework-generated URLs in ASP.NET MVC?

我的应用程序位于子文件夹 wwwroot/site1 中,但我使用 URL 重写入站规则使其在域 www.mydomain.com 的根目录下可用。

这很好用,但问题是 ASP.NET MVC 生成 URLs with /site1 子文件夹,因为它不了解IIS级别的重写规则。

解决这个问题的一种方法是创建出站规则,但我认为必须有更优雅的方法。我更愿意在应用程序级别处理它。

有没有办法告诉 ASP.NET MVC 从所有生成的 URL 中删除 /dga 部分?特别是以下 URL 作者:

Html.ActionLink(...)
Url.Action(...)

return RedirectToAction(...)

当然我可以使用这样的扩展方法:

public static string ReplaceSubfolder(this string str)  // and other types
{
    return str.Replace("/site1", "");
}

Html.ActionLink(...).ReplaceSubfolder()
Url.Action(...).ReplaceSubfolder()

return RedirectToAction(...).ReplaceSubfolder()

但这更不优雅。我正在寻找一种方法来影响生成 URLs.

的路由

事实证明,使用 IIS 很容易做到这一点。只需为每个域创建一个单独的网站,选择应用程序所在的子文件夹(例如 wwwroot/site1),设置绑定 (HTTP and/or HTTPS) 以收听您想要的域。创建网站时,Convert to application.. 相关文件夹,所有内容都应显示在域的根目录中。