Server.MapPath从root返回两个文件夹

我是这样做的:

HttpContext.Current.Server.MapPath(@"~\~\~\Content\") 

我知道’。’ 是为了项目的根,但如何回几个文件夹?

如果您确实需要祖父路径,可以使用Path.GetDirectoryName()从根路径获取它:

 string root = Server.MapPath("~"); string parent = Path.GetDirectoryName(root); string grandParent = Path.GetDirectoryName(parent); 

但是你的网络应用很可能没有阅读或写作的权限 – 我不确定你将用它做什么。

您可以使用Parent.Parent.FullName

  string grandParent = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/")).Parent.Parent.FullName; 

使用~开始使用站点的根目录,并指定完整路径: ~/Archive/Content

由于安全限制, 您无法返回到站点根目录之上 ,另请参阅其他解决方案中的这篇文章 。

IIS有目的地阻止直接提供站点路径之外的内容。 但是,您可以在IIS中创建虚拟目录,并让ISAPI重写指向该目录。 例如,创建一个名为/ staticfiles的虚拟目录,该目录指向c:\ test \ data \ static-files。 就IIS而言,它直接位于名为/ staticfiles的文件夹中的站点根目录之外。

由于您使用的是MapPath,因此您将从虚拟路径(/)返回物理路径(\)。

除非您的虚拟父级和虚拟祖父级具有与物理目录结构相同的层次结构,否则创建DirectoryInfo对象或使用从子应用程序根开始的Path实用程序方法不一定能满足您的期望。

我的应用程序没有物理嵌套以匹配Url深度。 如果涉及虚拟目录,也可能是这种情况。

假设祖父母应用程序是两个虚拟文件夹,这将为您提供物理路径…

  string physicalGrandparentPath = HttpContext.Current.Server.MapPath("~/../../"); 

使用它可以保护您免受IIS设置中正在进行的任何虚拟目录随机播放游戏的影响。

我用它来看看我能走多远。 在我尝试使用wwwroot之前,我没有得到HttpException。