2012-07-11 132 views
1

我需要获取该网站的网址,以便仅在主页上呈现用户控件。我需要检查http://foo.com,http://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) + "/"; 

有什么想法?

+0

我不明白。代码在哪里运行?你不能只把控制权放在'主页' - default.aspx或其他什么? – n8wrl 2012-07-11 15:08:07

+0

为什么您的标记在您的主页和您的子页面之间共享?如果你只想要一个用户控件显示在主页上,你应该有一个单独的ASPX页面,与其他页面分开。你提出的解决方案(检查当前页面的URL)是对你的设计缺陷的一种破解。 – qJake 2012-07-11 15:08:09

回答

2

您需要检查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

+0

+1 ...和作为[Uri](http://msdn.microsoft.com/en-us/library/txt7706a)处理将更容易独立于方案,协议等进行处理。 – Filburt 2012-07-11 15:23:16

0

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

如果此代码存储在主页面,那么你可以参考它想:

Master.FindControl("UserControlID"); 

如果你只使用一个Web表单(即刚Default.aspx),那么你就可以检查还没有相应的查询字符串包含在URL,并且只显示,如果是这样的话:

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

然而,如果你使用这种技术,那么我会建议使用多个web表单将来使用母版页来更好地构建您的应用程序。

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

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

+0

听起来像他的主页不仅仅驱动主页(认为'Default.aspx?q =/products/4'),所以这不起作用。 – qJake 2012-07-11 15:12:04

+0

@SpikeX谢谢我编辑了我的帖子以提供替代解决方案。 – Curt 2012-07-11 15:14:51

+0

谢谢大家。我正在使用的应用程序我没有设计。母版页用于创建额外的页面,并通过用户控件推送内容。 – 2012-07-11 15:39:34