Server.MapPath("."),Server.MapPath("~"),Server.MapPath(@"\"),Server.MapPath("/")。它们之间有什么区别?

474
有人能解释一下 Server.MapPath(".")Server.MapPath("~")Server.MapPath(@"\")Server.MapPath("/") 之间的区别吗?
4个回答

842

Server.MapPath指定将映射到物理目录的相对或虚拟路径。

  • Server.MapPath(".")1返回正在执行的文件(例如aspx)的当前物理目录。
  • Server.MapPath("..")返回上级目录。
  • Server.MapPath("~")返回应用程序根目录的物理路径。
  • Server.MapPath("/")返回域名根目录的物理路径(不一定与应用程序根目录相同)。

示例:

假设您将一个网站应用程序(http://www.example.com/)指向了

C:\Inetpub\wwwroot

你已经安装了商店应用程序(将子网站作为虚拟目录安装在IIS中,并标记为应用程序)。

D:\WebApps\shop
例如,在以下请求中调用Server.MapPath()
http://www.example.com/shop/products/GetProduct.aspx?id=2342
  • Server.MapPath(".")1 返回 D:\WebApps\shop\products
  • Server.MapPath("..") 返回 D:\WebApps\shop
  • Server.MapPath("~") 返回 D:\WebApps\shop
  • Server.MapPath("/") 返回 C:\Inetpub\wwwroot
  • Server.MapPath("/shop") 返回 D:\WebApps\shop

如果路径以正斜杠 (/) 或反斜杠 (\) 开头,MapPath() 返回一个虚拟路径。

如果路径不以斜杠开头,则MapPath()返回相对于正在处理的请求目录的路径。

注意:在C#中,@是字符串文本转义操作符,表示该字符串应按原样使用,不进行转义序列处理。

脚注

  1. Server.MapPath(null)Server.MapPath("") 也会产生这种效果

45
好的,我们一直在与Server.Bloody.MapPath作斗争。谢谢。 - gbn
27
你最好使用HostingEnvironment.MapPath,因为它不需要HttpContext:https://dev59.com/eXNA5IYBdhLWcg3wfN2O - skolima
两个问题,如下:(1)ASP Classic版本的Server.MapPath是否与上述描述的方式相同?和(2)我在服务器上安装了一个SSD驱动器,它的驱动器字母是“G:”。网站位于驱动器字母“E:”上。我想让IMAGES目录(以及其他一些目录)驻留在G:驱动器上(以提高速度),但是当在代码中使用Server.MapPath时,它返回E:。它已经是指向E:驱动器的虚拟目录。如果我将其指向G:驱动器,如何通知Server.MapPath返回正确的驱动器字母到IMAGES文件夹? - PaulScott

25

以下是对@splattne回答的进一步解释:

MapPath(string virtualPath) 调用以下内容:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath) 方法调用 MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping) 方法,后者包含以下内容:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

如果你调用了 MapPath(null) 或者 MapPath(""),那么实际上等同于调用 MapPath(".")


4

1) Server.MapPath(".") -- 返回正在执行的文件(例如aspx)的“当前物理目录”。

例如,假设D:\WebApplications\Collage\Departments

2) Server.MapPath("..") -- 返回“父目录”

例如,D:\WebApplications\Collage

3) Server.MapPath("~") -- 返回“应用程序根目录的物理路径”

例如,D:\WebApplications\Collage

4) Server.MapPath("/") -- 返回域名根目录的物理路径

例如,C:\Inetpub\wwwroot


0

工作示例,希望这可以帮助展示使用MapPath的方法,不仅限于“/”。我们结合使用了“/”和“~”。

  1. string lotMapsUrl = "~/WebFS/Transport/Maps/Lots/"; --- 将长URL存入变量中
  2. string lotMapsDir = Server.MapPath(lotMapsUrl); --- 获取此位置的完整物理路径
  3. string[] files = Directory.GetFiles(lotMapsUrl); --- 从物理路径获取文件列表

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接