36

アプリケーションが現在ホストされている完全な仮想パスを知るにはどうすればよいですか? 例えば:

http://www.mysite.com/myApp

また

http://www.mysite.com/myApp/mySubApp

HttpRequest のアプリケーション パスはわかっていますが、アプリケーションが現在ホストされているフォルダー名しか返されませんが、最初の部分を取得するにはどうすればよいですか?

4

6 に答える 6

77

パスのドメイン名部分は実際にはアプリケーション自体のプロパティではなく、要求元の URL に依存します。多くの異なるホスト名から 1 つの Web サイトにアクセスできる場合があります。現在の requestに関連付けられているドメイン名と、現在のアプリケーションの仮想パスを取得するには、次のようにします。

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

技術的には、「アプリケーション」は IIS で定義された仮想ディレクトリであり、Request.ApplicationPathまさにそれを返します。現在のリクエストが処理されているフォルダーを取得する場合は、次のようにします。

VirtualPathUtility.GetDirectory(Request.Path)

IIS で仮想ディレクトリとして定義されていない場合、ASP.NET はサブアプリケーションをより大きなアプリケーションと区別する方法を知りません。IIS に登録しないと、全体が 1 つのアプリとして認識されます。

于 2009-05-31T20:13:35.537 に答える
19
Request.Url

以下の画像を参照してください。

ここに画像の説明を入力

于 2009-05-31T20:16:55.577 に答える
6

.NET 4.5 では

    VirtualPathUtility.ToAppRelative(path)
于 2014-02-03T03:27:23.310 に答える
6

以下のコードは目的を解決しますが、2 種類のシナリオでは少し調整する必要があります。

  1. 別の Web アプリケーションとしてホストされます。
  2. Web アプリケーション内で仮想アプリケーションとしてホストされます。

    HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

于 2009-11-23T07:50:43.000 に答える
2

これを試してみてください(試したことはありません)

public string GetVirtualPath(string physicalPath)
{
string rootpath = Server.MapPath("~/");
physicalPath = physicalPath.Replace(rootpath, "");
physicalPath = physicalPath.Replace("\\", "/");
return "~/" + physicalPath;
}

リンク 1

リンク 2

于 2009-05-31T20:08:27.810 に答える
0

Url.Content("~")私にとってはうまく機能し、素晴らしくシンプルです。私はこのようにビューでそれを使用しました:

<a href="@(Url.Content("~" + attachment))">

ここでは、 "/Content/Documents/Blah.PDF"attachmentのようなパスです。

仮想ディレクトリを使用する IIS サイトにアプリを公開すると、たとえば"/app-test" のUrl.Content("~")ような仮想ディレクトリ名だけに解決されます。

于 2019-03-12T19:17:20.900 に答える