Webappが別のサーバー上の別のアプリとファイルを簡単に共有できるようにするために、マスターページでbase hrefタグを使用しています。多くの人々が発見したように、これはウェブフォームのパスを壊します。動作するフォームアダプタークラスがありますが、URLの絶対パスを取得する方法がわかりません。現在、私のプログラムは次のようなものを使用するようにハードコードされています:
HttpContext Context = HttpContext.Current;
value = "http://localhost" + Context.Request.RawUrl;
現在、ローカルのIISサーバーでテストしているため、絶対パスに含まれないものを使用するために試した多くのことには奇妙な傾向があることに注意してくださいドメイン名(my local 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);