获取一个页面的完整网址,对于另一个网站的子文件夹中的网站

时间:2013-09-26 00:11:13

标签: c# asp.net-mvc asp.net-mvc-routing sitefinity

我使用Sitefinity(6.1),ASP.Net和4.0框架。

我们已经在IIS上托管了一个sitefinty网站作为网站。 出于许可原因,我们希望添加一个新站点,也使用Sitefinity 网站作为子文件夹。

让我们说网站1是Foo,新网站叫做Bar。

问题是当我获得或使用Bar的相对路径时,我真的从Foo那里得到了路径。

所以atm我正在使用黑客来获取网址。我使用相对路径,然后插入Bar man ually。

e.g。页面被称为家庭。 〜/ home解析为http://www.Foo.com/home。当它应该是http://www.Foo.com/Bar/home时,我只需在手动atm中添加Bar。

在ASP.Net或Sitefinity或MVC中必须有一些方法来说这是我的页面,给我完整的网址。

是否有人为其他网站的网站解析网址?

3 个答案:

答案 0 :(得分:1)

从技术上讲,你正在寻找这样的答案: How do I get the full url of the page I am on in C#

但是对于Sitefinity,你必然会遇到麻烦,因为它有许多对网站根目录的“水下”引用。例如,在 Administration>>下的后端查看示例。设置>>高级>>虚拟路径

因此,您必然会遇到一些交叉污染,并最终导致两个破碎的地点。

虽然我不是为了躲避许可证,但这里有一些建议:

  • 他们允许无限制的子域名。
  • 安装'bar'作为~/将正确解析的IIS应用程序。
  • 更改管理>>设置>>高级>>系统>> SiteURL设置

最后一个选项将允许您设置site-root(不是iis / asp.net级别,但是sitefinity级别),此时您可以使用page.GetFullUrl();

通过Sitefinity API检索正确的URL

答案 1 :(得分:0)

如果有人想知道我找到了一个适用于所有环境的简单解决方案。

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

其中node是SiteMapNode类型(但是你可以获得你想要的url)。 如果有子文件夹,则会给出正确的路径。

答案 2 :(得分:0)

如果页面不在根级别,则此string url = node.Url.Replace("~/", "./");将不起作用。 例如,对于此网址:“xxxx://www.foo.com/sitename/sitefolder/sitepage”,它将返回“xxxx://www.foo.com/sitename/sitefolder/home”,而不是“xxxx:/ /www.foo.com/sitename/home“