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

时间:2012-03-15 18:07:54

标签: c# asp.net iis

我是这样做的:

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

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

5 个答案:

答案 0 :(得分:12)

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

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

但您的网络应用很可能无法在那里阅读或写作 - 我不确定您将使用它做什么。

答案 1 :(得分:4)

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

由于安全限制,您无法返回站点根目录,另请参阅其他解决方案中的this article

  

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

答案 2 :(得分:3)

您可以使用 Parent.Parent.FullName

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

答案 3 :(得分:0)

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

创建DirectoryInfo对象或使用从子应用程序根开始的Path实用程序方法,除非您的虚拟父级和虚拟祖父级具有与物理目录结构相同的层次结构,否则无法为您提供所期望的内容。

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

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

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

使用此功能可以确保您远离IIS设置中的任何虚拟目录随机播放游戏。

我用这个来看看我能走多远。在我试图超越wwwroot之前,我没有得到HttpException。

答案 4 :(得分:0)

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

output:
+-----------+--------+
| area_code | region |
+-----------+--------+
|       201 | NJ     |
|       202 | DC     |
|       203 | CT     |
|       204 | MB     |
|       205 | AL     |
+-----------+--------+

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

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

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