2013-01-24 12 views
5

私は自分のローカルホストとライブサイトを持っています。私は、URLを持っており、その中には、localhostの場合、URLはローカルホスト/サイト/ thank_you.aspxに行く必要があり、もしそのライブ私は後ろの私のコードでこれを試してみましたhttp://mylivesite.com/thank_you.aspxRequest.URL for localhostとライブサイト

...

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 :)

EDIT行くだけの場合には、あまりにもで、私も追加スキームを、これを試してみてください

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:@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

+1 httpsオプションの場合。 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

があります。関数が相対パスを処理できるようにします。例:〜/ or〜/ 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)); 
}