asp.net でサイトの絶対的な完全修飾 URL を決定する
質問
サイトが仮想ディレクトリ内にあるかどうかや、コードがディレクトリ構造内のどこにあるかに関係なく、サイトの完全修飾ルートまたはベース URL を一貫して取得するにはどうすればよいですか?考えられるすべての変数と関数を試しましたが、良い方法が見つかりませんでした。
現在のサイトの URL を取得できるようにしたいと考えています。 http://www.example.com または仮想ディレクトリの場合は、 http://www.example.com/DNN/
ここでは私が試したこととその結果をいくつか紹介します。私が欲しい作品が全部入っている唯一のものです(http://localhost:4471/DNN441) は Request.URI.AbsoluteURI:
- リクエストの物理パス:C:\WebSites\DNN441\Default.aspx
- リクエスト.アプリケーションパス:/DNN441
- リクエスト.PhysicalApplicationPath:C:\Webサイト\DNN441\
- マップパス:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
- RawURL:/DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
- Request.URL.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
- リクエスト.URL.絶対パス:/DNN441/Default.aspx
- リクエスト.URL.ローカルパス:/DNN441/Default.aspx 要求.URL.ホスト:ローカルホスト
- リクエスト.URL.パスとクエリ:/DNN441/Default.aspx?TabId=56&ctl=詳細&mid=374&ItemID=1
解決
Rick Strahl のブログで提供された回答を読んで、私が本当に必要としていたものは非常にシンプルであることがわかりました。まず、相対パスを決定し (これは私にとって簡単な部分でした)、それを以下で定義されている関数に渡す必要があります。
VB.NET
Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
Return Result.ToString
End Function
C#
public static string GetFullyQualifiedURL(string s) {
Uri Result = new Uri(HttpContext.Current.Request.Url, s);
return Result.ToString();
}
他のヒント
受け入れられた回答は、現在のリクエストがすでにサーバー/仮想ルートにあることを前提としています。これを試して:
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
に関する素晴らしい議論やアイデアがいくつかあります リック・シュトラールのブログ
編集:このアイデアは、有効な HttpContext の有無にかかわらず機能することを付け加えておきます。
編集2:こちらが 特定のコメント/コード 質問に答えるその投稿について
見つかった このコードはここにあります:
string appPath = null;
appPath = string.Format("{0}://{1}{2}{3}",
Request.Url.Scheme,
Request.Url.Host,
Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
Request.ApplicationPath);
通常は web.config ファイルで構成されている AppSettings.RootUrl を試してみましたか?
リンクとして使用することについて話しているのですか?
もしそうなら、これをやります <a href='/'>goes to root</a>
Web ルートのデフォルト ファイルに移動します。
さて、クライアント側では、「~/」を Control::ResolveUrl メソッドに渡すと、探しているものが提供されます。(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)
現時点ではこれを検証する方法はありませんが、別のマシンから「Request.Url.AbsoluteUri」を試してみましたか?
あなたのマシンに関する限り、ブラウザがローカルホストからリクエストを行っているように思えます。
私は間違っている可能性がありますが、リクエストはWebサーバーではなくブラウザに関連していると思います。