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

问题描述:

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

http://www.mysite.com/myApp 

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

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

路径的域名部分并不是应用程序本身的属性,而是取决于请求的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

试一下这个(没试过)

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

Link 1

Link 2

要完全回答这个问题,我想你需要描述你真正想要做的,什么是使你的路径值“未知”

通常当我遇到路径查找问题这篇博客文章由Rick Strahl cle ars的东西适合我:http://www.west-wind.com/weblog/posts/269.aspx

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

+0

的链接断开 – 2016-04-28 13:55:47

Request.Url 

它包含了你可以考虑使用,见下图几点:

enter image description here

下面的代码将解决这个目的,但你必须有两个做了一下调整场景类型:

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

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

在.NET 4中。5

VirtualPathUtility.ToAppRelative(path)