アプリケーションが現在ホストされている完全な仮想パスを知るにはどうすればよいですか?例えば:
http://www.mysite.com/myApp
または
http://www.mysite.com/myApp/mySubApp
HttpRequestのアプリケーションパスは知っていますが、アプリケーションが現在ホストされているフォルダー名のみを返しますが、最初の部分を取得するにはどうすればよいですか?
パスのドメイン名部分は、実際にはアプリケーション自体のプロパティではありませんが、要求元の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つのアプリとして認識します。
Request.Url
使用することが考えられるいくつかのポイントが含まれています。下の画像を参照してください。
.NET 4.5で
VirtualPathUtility.ToAppRelative(path)
以下のコードは目的を解決しますが、2種類のシナリオに対して少し調整する必要があります。
Webアプリケーション内の仮想アプリケーションとしてホストされます。
HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)+ HttpRuntime.AppDomainAppVirtualPath;
Url.Content("~")
私にとってはうまく機能し、すてきでシンプルです。私はこのようなビューでそれを使用しました:
_<a href="@(Url.Content("~" + attachment))">
_
ここで、私のattachment
は "/ Content/Documents/Blah.PDF"のようなパスです。
アプリがIIS仮想ディレクトリを使用するサイトに公開されると、Url.Content("~")
は)のような仮想ディレクトリ名のみに解決されます」/app-test "など。