2009-02-19 67 views
47

ウェブアプリケーションが別のサーバー上の別のアプリケーションとファイルを共有するのを簡単にするために、私はマスターページにベースhrefタグを使用しています。多くの人が発見したように、これはWebフォームのパスを破壊します。フォームアダプタのクラスは動作していますが、URLの絶対パスを取得する方法がわかりません。現在、私のプログラムは、に似て何かを使用するようにハードコードされていますAsp.Net URLの絶対パス

HttpContext Context = HttpContext.Current; 
value = "http://localhost" + Context.Request.RawUrl; 

それは私が現在、私のローカルIISサーバー上でテストしてることは注目に値するので、私が使用して試したことがたくさんのための奇妙な傾向があります絶対パスにドメイン名が含まれないようにします(私のローカルIISは外部から見えません)。つまり、それは絶対パスではないので、ベースhrefはそれを破壊します。

これを処理する良い方法は、ハードコーディングなしでローカルでも動作しますが、サーバーにアップロードすると正しく動作するようにする方法はありますか?私はサーバー側のコピーで何か別のことをすることを含む何かを避けることを好むだろう。

はい、私はこの情報を得るためにローカルとサーバー上で別々のweb.configファイルを使用できますが、これは醜いものでDRYに違反しています。

+0

わかりませんが、Request.Url.Hostを試しましたか? –

答えて

108

私は過去にこれを使用しています

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath" 
HttpContext.Current.Request.Url.Scheme 
    + "://" 
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath; 
-9

コード:ここ

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"]; 
+7

パスワードをURLに入れるのは非常に悪いことです。それをしないでください。 –

2

オールド・ポストが、私は次のように使用している別のわずかに少ない冗長方法

var baseUri = new Uri(HttpContext.Current.Request.Url, "/"); 
0

で、それはクライアントとサーバーの両方の私のために働いた。

string surl = string.Format("{0}://{1}", 
    HttpContext.Current.Request.Url.Scheme, 
    HttpContext.Current.Request.Url.Authority);