質問

Web アプリが別のサーバー上の別のアプリとファイルを共有しやすくするために、マスター ページで基本の href タグを使用しています。多くの人が気づいているように、これはウェブフォームのパスを壊します。機能するフォームアダプタークラスがありますが、URLの絶対パスを取得する方法がわかりません。現在、私のプログラムは次のようなものを使用するようにハードコードされています。

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

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

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

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

役に立ちましたか?

解決

私は過去にこれを使用したことがあります:

// 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;

他のヒント

古い投稿ですが、これはもう少し冗長ではない別の方法です

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

私は以下を使用しましたが、クライアントとサーバーの両方でうまくいきました。

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

コード:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top