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

11 浏览
0 Comments

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

有人可以解释一下Server.MapPath(\".\")Server.MapPath(\"~\")Server.MapPath(@\"\\\")Server.MapPath(\"/\")之间的区别吗?

admin 更改状态以发布 2023年5月25日
0
0 Comments

只是稍微展开了一下 @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(".")

0
0 Comments

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

  • Server.MapPath(".")返回正在执行的文件(例如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(".") 返回 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("")也会产生这种效果
0