2009-05-31 61 views
31

如何知道我的應用程序當前託管的完整虛擬路徑?例如:如何獲取ASP.NET應用程序的完整虛擬路徑

http://www.mysite.com/myApp 

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

我知道的HttpRequest的應用程序的路徑,但它只返回我的應用程序目前正在託管文件夾的名稱,但我如何獲得初始的一部分?

回答

71

路徑的域名部分並不是應用程序本身的屬性,而是取決於請求的URL。您可能能夠從多個不同的主機名稱訪問單個網站。爲了獲得與當前請求相關,與當前應用程序的虛擬路徑沿着域名,你可以這樣做:

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

從技術上講,「應用」是在IIS和Request.ApplicationPath返回定義虛擬目錄確切的說。如果你想在當前請求被處理的文件夾,你可以這樣做:

VirtualPathUtility.GetDirectory(Request.Path) 

ASP.NET不知道如何將您的子應用程序從一個更大的應用區別,如果它沒有定義作爲IIS中的虛擬目錄。如果不在IIS中註冊,它只會將整個事件視爲單個應用程序。

+2

如果應用程序是在IIS虛擬目錄,但我們請求的頁面是幾個文件夾內,但我們希望路徑包括虛擬目錄,但沒有文件夾,如何做到這一點? – Krunal 2013-10-17 09:31:40

+1

@ Krunal [HttpRuntime.AppDomainAppVirtualPath](https://msdn.microsoft.com/en-us/library/system.web.httpruntime.appdomainappvirtualpath(v = vs.110).aspx)或Request.ApplicationPath – jproch 2016-11-11 15:48:04

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 ars的東西適合我:http://www.west-wind.com/weblog/posts/269.aspx

可能必須混合和匹配才能得到你想要的。

+0

的鏈接斷開 – 2016-04-28 13:55:47

18
Request.Url 

它包含了你可以考慮使用,見下圖幾點:

enter image description here

3

下面的代碼將解決這個目的,但你必須有兩個做了一下調整場景類型:

  1. 作爲獨立的Web應用程序託管。
  2. 託管爲Web應用程序內的虛擬應用程序。

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

6

在.NET 4中。5

VirtualPathUtility.ToAppRelative(path) 
相關問題