2009-05-31 12 views
31

アプリケーションが現在ホストしている完全な仮想パスを知る方法を教えてください。たとえば:ASP.NETアプリケーションの完全な仮想パスを取得する方法

http://www.mysite.com/myApp 

または

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

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

答えて

71

パスのドメイン名部分は、実際にアプリケーション自体のプロパティではなく、要求元のURLに依存します。さまざまなホスト名から単一のWebサイトにアクセスできる可能性があります。 現在のリクエストに関連付けられたドメイン名を取得し、現在のアプリケーションの仮想パスと一緒に、あなたができるには:

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

技術的には、「アプリケーション」IISとRequest.ApplicationPathリターンで定義された仮想ディレクトリですまさにそれ。

VirtualPathUtility.GetDirectory(Request.Path) 

ASP.NETは、それが定義されていない場合は、より大きなアプリケーションからサブアプリケーションを区別するために、どのようには考えていません:あなたは現在要求が処理されているフォルダを取得したい場合は、これを行うことができますIISの仮想ディレクトリとして使用します。 IISに登録しなくても、すべてのことを単一のアプリケーションとして見るだけです。

+2

を破壊され、アプリケーションはIISの仮想ディレクトリがあるが、私たちは要求されているページがいくつかのフォルダ内にあるが、私たちは、仮想ディレクトリではなく、フォルダを含むパスをしたい場合は、これをどのように行うには? – Krunal

+1

@Krunal [HttpRuntime.AppDomainAppVirtualPath](https://msdn.microsoft.com/en-us/library/system.web.httpruntime.appdomainappvirtualpath(v = vs.110).aspx)またはRequest.ApplicationPath – jproch

2

完全に私はあなたが何をあなたが実際にやろうとしていると何を記述する必要があると思うこの質問に答えるために

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

Link 1

Link 2

1

(それを試していない)、これを試してみてくださいあなたのパスの値を "不明"にする

通常、パスの検索には、Rick Strahl cle私のためのものを手に入れよう:http://www.west-wind.com/weblog/posts/269.aspx

あなたが望むものを得るためには、ミックスして一致させる必要があります。

+0

リンクは –

18
Request.Url 

それは下の画像を参照してください、あなたが使用することを検討するかもしれないいくつかのポイントが含まれています。以下のコードは、目的を解決する

enter image description here

3

、しかし、あなたは2のためのビットのチューニングをしなければなりませんシナリオの種類:

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

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

6

.NET 4。5

VirtualPathUtility.ToAppRelative(path) 
関連する問題