Server.MapPath("."),Server.MapPath("~"),Server.MapPath(@"\"),Server.MapPath("/")。它们有什么区别?
Server.MapPath("."),Server.MapPath("~"),Server.MapPath(@"\"),Server.MapPath("/")。它们有什么区别?
有人可以解释一下Server.MapPath(\".\")
、Server.MapPath(\"~\")
、Server.MapPath(@\"\\\")
和Server.MapPath(\"/\")
之间的区别吗?
admin 更改状态以发布 2023年5月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(".")
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#中,@
是字面上的字符串运算符,意味着该字符串应该“按原样”使用,而不应处理转义序列。
脚注
Server.MapPath(null)
和Server.MapPath("")
也会产生这种效果。