关于c#:获取页面的完整URL,用于其他网站的子文件夹中的网站

Get full url of a page, for a website in a subfolder of another website

我使用的是SiteFinity(6.1)、ASP.NET和4.0框架。

我们有一个SiteFinty网站已经作为网站托管在IIS上。出于许可的原因,我们希望添加一个新的站点,也可以将SiteFinity添加到相同的站点网站作为子文件夹。

假设网站1是foo,新网站称为bar。

问题是当我得到或使用相对路径窗体栏时,我真的从foo得到了路径。

所以atm我使用黑客来获取网址。我使用相对路径,然后手动插入条。

例如,页面称为主页。~/home解析为http://www.foo.com/home。当它应该是http://www.foo.com/bar/home时,我只需在手动ATM中添加这个条。

在ASP.NET、SiteFinity或MVC中,一定有某种方法可以说这是我的页面,请给出完整的URL。

有没有人有经验解决其他网站的网址?


从技术上讲,你在寻找这样的答案:如何在C语言中获取我所在页面的完整URL?#

但关于网站有限性,你一定会遇到麻烦,因为它有很多"水下"的网站根的参考。请在后端系统的"管理">>"设置">>"高级">>"虚拟路径"下查看实例。

所以你一定会遇到一些交叉污染,最终导致两个破碎的地方。

虽然我不是为了逃避许可证,但这里有几个建议:

  • 它们允许无限的子域。
  • 将"bar"安装为IIS应用程序,这样~/将正确解析。
  • 更改"管理">>"设置">>"高级">>"系统">>"站点URL设置"。

最后一个选项将允许您设置站点根目录(不是IIS/ASP.NET级别,而是SiteFinity级别),此时您可以使用page.GetFullUrl();通过SiteFinity API检索正确的URL。


如果页面不在根级别,这个string url = node.Url.Replace("~/","./");将无法工作。例如,对于此URL:"XXXX://www.foo.com/sitename/sitefolder/sitepage"它将返回"XXXX://www.foo.com/sitename/sitefolder/home",而不是"XXXX://www.foo.com/sitename/home"


如果有人想知道,我找到了一个在所有环境中都能工作的简单解决方案。

1
string url = node.Url.Replace("~/","./");

其中node的类型为sitemapnode(但您可以根据需要获取URL)。如果有或没有子文件夹,则给出正确的路径。