2013-01-24 102 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)); 
} 
相關問題