アプリケーションが現在ホストされている完全な仮想パスを知るにはどうすればよいですか? 例えば:
http://www.mysite.com/myApp
また
http://www.mysite.com/myApp/mySubApp
HttpRequest のアプリケーション パスはわかっていますが、アプリケーションが現在ホストされているフォルダー名しか返されませんが、最初の部分を取得するにはどうすればよいですか?
パスのドメイン名部分は実際にはアプリケーション自体のプロパティではなく、要求元の URL に依存します。多くの異なるホスト名から 1 つの Web サイトにアクセスできる場合があります。現在の requestに関連付けられているドメイン名と、現在のアプリケーションの仮想パスを取得するには、次のようにします。
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
技術的には、「アプリケーション」は IIS で定義された仮想ディレクトリであり、Request.ApplicationPath
まさにそれを返します。現在のリクエストが処理されているフォルダーを取得する場合は、次のようにします。
VirtualPathUtility.GetDirectory(Request.Path)
IIS で仮想ディレクトリとして定義されていない場合、ASP.NET はサブアプリケーションをより大きなアプリケーションと区別する方法を知りません。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))">
ここでは、 "/Content/Documents/Blah.PDF"attachment
のようなパスです。
仮想ディレクトリを使用する IIS サイトにアプリを公開すると、たとえば"/app-test" のUrl.Content("~")
ような仮想ディレクトリ名だけに解決されます。