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

时间:2009-05-31 20:03:33

标签: asp.net path virtual

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

http://www.mysite.com/myApp

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

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

6 个答案:

答案 0 :(得分:73)

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

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

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

VirtualPathUtility.GetDirectory(Request.Path)

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

答案 1 :(得分:18)

Request.Url

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

enter image description here

答案 2 :(得分:6)

在.NET 4.5中

    VirtualPathUtility.ToAppRelative(path)

答案 3 :(得分:4)

以下代码将解决此问题,但您必须针对两种类型的方案进行一些调整:

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

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

答案 4 :(得分:2)

试试这个(还没试过)

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

Link 1

Link 2

答案 5 :(得分:0)

Url.Content("~") 对我来说很不错,而且很简单。我在这样的视图中使用它:

<a href="@(Url.Content("~" + attachment))">

这里的attachment“ / Content / Documents / Blah.PDF” 这样的路径。

将我的应用发布到使用虚拟目录的IIS站点时,Url.Content("~")仅解析为虚拟目录名称,例如“ / app-test” 。< / p>