2013-01-24 13 views
5

Mam mojego lokalnego hosta i stronę na żywo. Mam URL i jeśli jej w localhost URL powinien iść localhost/site/thank_you.aspx a jeśli jej na żywo http://mylivesite.com/thank_you.aspxRequest.URL dla localhost i strony na żywo

Próbowałem to w moim kod związany ...

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

ale wrócił strona, na której byłem /thank_you.aspx

Co robię źle?

+0

Dlaczego nie użyć względnej ścieżki: 'MyHiddenField.Value =" /thank_you.aspx ";'? – Alex

+0

@Alex Może jest używany do tworzenia linków do wiadomości e-mail itp. – MikeSmithDev

+0

Czy masz na myśli, że 'http: // localhost/coś' powinien" przejść do "' http: // localhost/site/thank_you.aspx', ale że 'http: // mylivesite.com/coś' powinno przejść do' http: // mylivesite.com/thank_you.aspx'? Gdzie jest twoja strona internetowa na 'localhost'? –

Odpowiedz

8

Spróbuj tego, że nawet w zbyt dodaje schemat, na wszelki wypadek udać https :)

EDIT: Dodano także portu (Dzięki Alex) aby być Super duper bardzo przyszłościowe :)

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

EDIT: Kolejna dobra sugestia przez @MikeSmithDev, umieścić go w funkcji

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); 
} 

Następnie można zrobić:

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

@Alex dzięki za to :) – mattytommo

+1

Nie ma za co. :) Należy również uważać na numer portu, jeśli nie ma 80 w pewnym scenariuszu wdrożenia. – Alex

+1

+1 dla opcji https. Innym dobrym argumentem dla OP jest uczynienie z niego globalnej funkcji, którą mógłby nazwać 'MakeURL ("/thank_you.aspx ")' – MikeSmithDev

2

Jest wbudowany w klasie UriBuilder

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

dodając do powyższych odpowiedzi. Zezwalaj funkcji na obsługę ścieżek względnych. Na przykład: ~/lub ~/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)); 
}