8

サイトが仮想ディレクトリ内にあるかどうか、およびコードがディレクトリ構造内のどこにあるかに関係なく、サイトの絶対的な完全修飾ルートまたはベース URL を一貫して取得するにはどうすればよいですか? 考えられるすべての変数と関数を試しましたが、良い方法が見つかりませんでした。

現在のサイトの URL、つまりhttp://www.example.comまたは仮想ディレクトリの場合はhttp://www.example.com/DNN/を取得できるようにしたい


以下は、私が試したいくつかのこととその結果です。必要な部分全体 ( http://localhost:4471/DNN441 ) を含む唯一のものは Request.URI.AbsoluteURI:

  • Request.PhysicalPath: C:\WebSites\DNN441\Default.aspx
  • Request.ApplicationPath: /DNN441
  • Request.PhysicalApplicationPath: C:\WebSites\DNN441\
  • MapPath: C:\WebSites\DNN441\DesktopModules\Articles\Templates\Default.aspx
  • RawURL: /DNN441/ModuleTesting/Articles/tabid/56/ctl/Det​​ails/mid/374/ItemID/1/Default.aspx
  • Request.Url.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
  • Request.Url.AbsolutePath: /DNN441/Default.aspx
  • Request.Url.LocalPath: /DNN441/Default.aspx Request.Url.Host: localhost
  • Request.Url.PathAndQuery: /DNN441/Default.aspx?TabId=56&ctl=詳細&mid=374&ItemID=1
4

7 に答える 7

12

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();
}
于 2008-10-23T20:52:03.690 に答える
7

受け入れられた答えは、現在のリクエストがすでにサーバー/仮想ルートにあることを前提としています。これを試して:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
于 2011-08-18T18:46:31.963 に答える
5

Rick Strahl のブログには、いくつかの優れた議論とアイデアがあります。

編集:有効なHttpContextの有無にかかわらず、アイデアが機能することを追加する必要があります。

EDIT2:質問に答えるその投稿の特定のコメント/コードは次のとおりです

于 2008-09-23T16:01:45.507 に答える
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);
于 2009-10-19T13:13:45.697 に答える
0

現時点でこれを検証する方法はありませんが、別のマシンから「Request.Url.AbsoluteUri」を試しましたか?

あなたのマシンに関する限り、ブラウザがローカルホストからリクエストしていることがわかります。

私は間違っているかもしれませんが、リクエストはウェブサーバーではなくブラウザに関連していると思います。

于 2008-09-23T16:45:12.423 に答える
0

通常は web.config ファイルで構成されている AppSettings.RootUrl を試しましたか?

于 2008-09-23T16:02:53.553 に答える
0

リンクとして使用することについて話しているのですか?

その場合、これ<a href='/'>goes to root</a>を実行すると、Web ルートのデフォルト ファイルに移動します。

ここで、クライアント側では、「~/」を Control::ResolveUrl メソッドに渡すと、探しているものが提供されます。( http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx )

于 2008-09-23T16:05:08.137 に答える