Server.MapPath(“。”),Server.MapPath(“〜”),Server.MapPath(@“\”),Server.MapPath(“/”)。有什么不同?

时间:2008-11-09 09:48:04

标签: asp.net path directory mapping filesystems

任何人都可以解释Server.MapPath(".")Server.MapPath("~")Server.MapPath(@"\")Server.MapPath("/")之间的区别吗?

3 个答案:

答案 0 :(得分:786)

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

如果Path以正斜杠(/)或反斜杠(\)开头,MapPath()将返回一条路径,就像Path是一条完整的虚拟路径一样。

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

注意:在C#中,@是逐字文字字符串运算符,意味着字符串应“按原样”使用,不能为转义序列处理。

脚注

  1. Server.MapPath(null)Server.MapPath("")produce this effect too

答案 1 :(得分:24)

稍微扩展@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(".")

答案 2 :(得分: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