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


Answers:


809

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("")也会产生这种效果

44
优秀的。我们一直在与Server.Bloody.MapPath进行斗争。谢谢
gbn 2010年

26
使用HostingEnvironment.MapPath起来会更好,因为它不需要HttpContextstackoverflow.com/q/944219/3205
skolima 2012年

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.