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

C# Server.MapPath从根目录返回两个文件夹,c#,asp.net,iis,C#,Asp.net,Iis,我是这样做的: HttpContext.Current.Server.MapPath(@"~\~\~\Content\") 您好,我知道“.”是项目的根目录,但是如何返回几个文件夹?从站点的根目录开始,使用~并指定完整路径:~/Archive/Content 由于安全限制,您无法返回到站点根目录上方,另请参见其他解决方案 IIS故意阻止直接提供站点路径之外的内容。但是,您可以在IIS中创建虚拟目录,并让ISAPI重写指向该目录。例如,创建一个名为/staticfiles的虚拟目录,该目录指向c

我是这样做的:

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

您好,我知道“.”是项目的根目录,但是如何返回几个文件夹?

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

由于安全限制,您无法返回到站点根目录上方,另请参见其他解决方案

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


如果确实需要祖父母路径,可以使用以下命令从根路径获取它:


但是你的web应用很可能没有在那里读写的权限-我不确定你要用它做什么。

你可以使用Parent.Parent.FullName

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

因为您使用的是MapPath,所以从虚拟路径(/)返回的是物理路径(\)

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

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

假设一个祖父母应用程序是两个虚拟文件夹,这会让你的物理路径

    string physicalGrandparentPath = HttpContext.Current.Server.MapPath("~/../../");
使用这将使您免受IIS设置中正在进行的任何虚拟目录洗牌游戏的影响


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

最简单的方法是,您仍然可以使用以下命令:

string MyFolderName = Server.MapPath("~/AliasName/");
虚拟目录添加到应用程序中。以下是方法:

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

就这样,现在你有权限了

认为您想要
@.\..\\..\Content\“
@danRhul我得到错误“您不能使用前导…”这对我有什么帮助?它不会回去的,回去哪里?指定从网站根目录开始的内容路径。我在其中编写命令的文件与网站不在同一项目中。根目录、父目录和祖父母目录都返回相同的路径。为什么?真的吗?我手头没有ASP.NET站点来测试这一点,但我在LinqPad中尝试了一个从c:\inetpub\wwwroot\myapp开始的示例,它工作正常。若路径设置为限制您,我会感到惊讶——毕竟它只是处理一个字符串。所以我还没有在精确的环境中测试它,但如果它不起作用,我会感到惊讶。(我现在意识到我的代码假设root没有尾随斜杠-如果存在,您可能需要另一个Path.GetDirectoryName来摆脱它。)谢谢,这太完美了!
string MyFolderName = Server.MapPath("~/AliasName/");