2013-01-24 104 views
5

我有我的本地主机和一个活网站。我有一个网址,如果它在本地主机的URL应该去本地主机/网站/ thank_you.aspx如果其直播http://mylivesite.com/thank_you.aspx本地主机和活网站的Request.URL

我在后面我的代码尝试这个...

MyHiddenField.Value = Request.URL + "/thank_you.aspx"; 

但它返回我在/thank_you.aspx页面

我在做什么错了?

+0

为什么不使用相对路径:'MyHiddenField.Value =“/thank_you.aspx”;'? – Alex

+0

@Alex也许它被用来创建一个电子邮件等链接 – MikeSmithDev

+0

你的意思是'http:// localhost/something'应该“转到”'http:// localhost/site/thank_you.aspx'但是那么'http:// mylivesite.com/something'应该转到'http:// mylivesite.com/thank_you.aspx'?你的网站在'localhost'上? –

回答

8

太试试这个,我甚至补充方案,以防万一你去https :)的

编辑:另外添加的端口(感谢亚历克斯)在为了超级骗子超面向未来的:)

MyHiddenField.Value = string.Format(
    "{0}://{1}{2}/thank_you.aspx", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.Url.IsDefaultPort ? string.Empty : ":" + Request.Url.Port); 

编辑:另外一个很好的建议通过@MikeSmithDev,把它放在一个函数

public string GetUrlForPage(string page) 
{ 
    return MyHiddenField.Value = string.Format(
     "{0}://{1}{2}/{3}", 
     Request.Url.Scheme, 
     Request.Url.Host, 
     Request.Url.IsDefaultPort ? string.Empty : ":" + Request.Url.Port, 
     page); 
} 

然后,你可以这样做:

MyHiddenField.Value = GetUrlForPage("thank_you.aspx"); 
+0

@Alex谢谢你:) – mattytommo

+1

不客气:)另外,如果在某些部署场景中不是80,应该留意端口号。 – Alex

+1

对于https选项为+1。 OP的另一个好的考虑是使它成为一个全局函数,他可以称之为'MakeURL(“/ thank_you.aspx”)' – MikeSmithDev

2

有一个内置类UriBuilder

var url = Request.Url; 
var newurl = new UriBuilder(url.Scheme, url.Host, url.Port, "thank_you.aspx") 
       .ToString(); 
0

添加到上述问题的答案。允许函数处理相对路径。例如:〜/或〜/ test/default.aspx

public string GetUrlForPage(string relativeUrl) 
{ 
    return string.Format(
     "{0}://{1}{2}{3}", 
     Request.Url.Scheme, 
     Request.Url.Host, 
     Request.Url.IsDefaultPort ? string.Empty : ":" + Request.Url.Port, 
     Page.ResolveUrl(relativeUrl)); 
} 
相关问题