【问题标题】:How to retrieve site root url?如何检索站点根 URL?
【发布时间】:2012-07-11 15:06:10
【问题描述】:

我需要获取站点的 url,以便仅在主页上呈现用户控件。我需要检查 http://foo.comhttp://www.foo.com 和 foo.com。我对如何检查所有 3 项感到有些困惑。我尝试了以下方法,但它不起作用。

string domainName = Request.Url.Host.ToString();
    if (domainName == "http://nomorecocktails.com" | Request.Url.Host.Contains("default.aspx"))

    { //code to push user control to page

也试过了

var url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/";

有什么想法吗?

【问题讨论】:

  • 我不明白。这段代码在哪里运行?您不能将控件放在“主页”上吗? default.aspx 或其他什么?
  • 为什么您的标记会在您的主页和子页面之间共享?如果您只想在主页上显示一个用户控件,您应该为它有一个单独的 ASPX 页面,该页面与其他页面分开。您提出的解决方案(检查当前页面的 URL)是针对您的设计缺陷的破解。

标签: c# asp.net url


【解决方案1】:

您需要检查Request.Path 属性是否等于//Default.aspx 或您的“主页”是什么。域名完全无关紧要。如果我通过http://192.56.17.205/ 访问您的网站会怎样,同样,如果您的服务器切换 IP 地址会怎样?您的域检查将失败。

如果您使用 QueryString 来显示不同的内容,您还需要检查 Request.QueryString

Request.Path 的文档:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.path.aspx

Request.QueryString 的文档:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.querystring.aspx

【讨论】:

  • +1 ... 并将其视为Uri 将更容易独立于方案、协议等处理。
【解决方案2】:

如果您需要用户控件仅出现在主页上(我假设您的意思是主页),则将调用用户控件的代码添加到该文件后面的代码中。

如果此代码存储在母版页中,那么您可以像这样引用它:

Master.FindControl("UserControlID");

如果您只使用一个网络表单(即仅Default.aspx),那么您可以检查 URL 中是否包含相关查询字符串,并且仅在这种情况下显示:

if (Request.QueryString["q"] == null){
  //user control code
}

但是,如果您使用这种技术,那么我建议您在将来使用多个使用母版页的 Web 表单来更好地构建您的应用程序。

ASP.NET 网站上有一些关于如何做到这一点的很好的教程:

http://www.asp.net/web-forms/tutorials/master-pages

【讨论】:

  • 听起来他的主页不仅仅是主页(想想Default.aspx?q=/products/4),所以这行不通。
  • @SpikeX 谢谢我已经编辑了我的帖子以提供替代解决方案。
  • 谢谢大家。我使用的应用程序不是我设计的。母版页用于创建其他页面,并通过用户控件推送内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2011-12-27
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2014-09-01
  • 2015-02-17
相关资源
最近更新 更多