Server.MapPath从根目录返回两个文件夹

本文关键字:两个 文件夹 MapPath 根目录 返回 Server | 更新日期: 2023-09-27 18:27:52

以下是我的操作方法:

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

嗨,我知道是为项目的根目录,但是如何将几个文件夹放回去呢?

Server.MapPath从根目录返回两个文件夹

如果您确实需要祖父母路径,可以使用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 Rewrite指向该虚拟目录。例如,创建一个名为/staticfiles的虚拟目录,该目录指向c:''test''data''static文件。就IIS而言,它直接位于名为/staticfiles的文件夹中的站点根目录之外。

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

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

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

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

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

使用它可以保护您免受IIS设置中进行的任何虚拟目录洗牌游戏的影响。

我用这个来看看我能爬多远。直到我尝试超越wwwroot,我才得到HttpException。

最简单的方法,您仍然可以使用以下内容:

string MyFolderName = Server.MapPath("~/AliasName/");

虚拟目录添加到您的应用程序中。方法如下:

  • 在Visual Studio的根文件夹下,右键单击:
  • 添加>新建虚拟目录
  • 别名:别名
  • 文件夹:单击>浏览
  • 导航到您需要并完成的文件夹

就是这样,现在您可以访问了!