49

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

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

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

ハードコーディングせずにローカルで動作するだけでなく、サーバーにアップロードしたときにも適切に動作するように、これを処理する良い方法はありますか? サーバー側のコピーで何か違うことをすることは避けたいと思います。

はい、ローカルとサーバーで別々の web.config ファイルを使用してこの情報を取得できることはわかっていますが、これは見苦しく、DRY に違反しています。

4

5 に答える 5

112

私は過去にこれを使用しました:

// 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;
于 2009-02-19T22:56:48.677 に答える
4

古い投稿ですが、もう少し冗長な別の方法を次に示します

var baseUri = new Uri(HttpContext.Current.Request.Url, "/");
于 2015-10-22T15:30:57.480 に答える
-9

コード :

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];
于 2012-05-21T05:27:44.607 に答える