web-dev-qa-db-ja.com

ASP.NETアプリケーションの完全な仮想パスを取得する方法

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

http://www.mysite.com/myApp

または

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

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

33
user115195

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

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

技術的には、「アプリケーション」は、IIS and Request.ApplicationPathはまさにそれを返します。現在のrequestが処理されるフォルダーを取得したい場合、これを行うことができます:

VirtualPathUtility.GetDirectory(Request.Path)

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

73
Mehrdad Afshari
Request.Url

使用することが考えられるいくつかのポイントが含まれています。下の画像を参照してください。

enter image description here

18
balexandre

.NET 4.5で

    VirtualPathUtility.ToAppRelative(path)
6
Adamy

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

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

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

4
Rhonald Moses

これを試してください(試してみませんでした)

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

リンク1

リンク2

2
Shoban

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

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

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

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

0
Jess