如何获取ASP.NET应用程序的完整虚拟路径

use*_*195 33 asp.net virtual path

我如何知道我的应用程序当前托管的完整虚拟路径?例如:

http://www.mysite.com/myApp
Run Code Online (Sandbox Code Playgroud)

要么

http://www.mysite.com/myApp/mySubApp
Run Code Online (Sandbox Code Playgroud)

我知道HttpRequest的应用程序路径,但它只返回我的应用程序当前托管的文件夹名称,但是如何获取初始部分?

Meh*_*ari 73

路径的域名部分实际上不是应用程序本身的属性,而是取决于请求的URL.您可以从许多不同的主机名访问单个Web站点.要获取与当前请求关联的域名以及当前应用程序的虚拟路径,您可以执行以下操作:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
Run Code Online (Sandbox Code Playgroud)

从技术上讲,"应用程序"是在IIS中定义的虚拟目录,并且Request.ApplicationPath完全返回.如果要获取处理当前请求的文件夹,可以执行以下操作:

VirtualPathUtility.GetDirectory(Request.Path)
Run Code Online (Sandbox Code Playgroud)

如果没有将子应用程序定义为IIS中的虚拟目录,ASP.NET不知道如何将子应用程序与更大的应用程序区分开来.如果没有在IIS中注册,它只会将整个内容视为一个应用程序.

  • 如果应用程序是IIS中的虚拟目录,但我们请求的页面位于几个文件夹中,但我们想要包含虚拟目录但不包含文件夹的路径,该怎么做? (2认同)

bal*_*dre 18

Request.Url
Run Code Online (Sandbox Code Playgroud)

它包含您可能考虑使用的几个要点,请参见下图:

在此输入图像描述


Ada*_*amy 6

在.NET 4.5中

    VirtualPathUtility.ToAppRelative(path)
Run Code Online (Sandbox Code Playgroud)


小智 5

下面的代码将解决该目的,但是您必须对两种类型的场景进行一些调整:

  1. 作为单独的 Web 应用程序托管。
  2. 作为 Web 应用程序中的虚拟应用程序托管。

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