Server.MapPath(“。”),Server.MapPath(“〜”),Server.MapPath(@“\”),Server.MapPath(“/”)。 有什么不同?
任何人都可以解释Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
和Server.MapPath("/")
之间的区别吗?
Server.MapPath指定映射到物理目录的相对path或虚拟path。
-
Server.MapPath(".")
1返回正在执行的文件(例如aspx)的当前物理目录 -
Server.MapPath("..")
返回父目录 -
Server.MapPath("~")
返回到应用程序根目录的物理path -
Server.MapPath("/")
返回到域名根目录的物理path(不一定与应用程序的根目录相同)
一个例子:
假设您指定了一个网站应用程序( 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()
,则MapPath()
返回一个path,就像Path是完整的虚拟path一样。
如果Path不以斜杠开始,则MapPath()
将返回相对于正在处理的请求的目录的path。
注意:在C#中, @
是逐字string操作符,意思是该string应该被“按原样”使用,而不是为了转义序列而被处理。
脚注
-
Server.MapPath(null)
和Server.MapPath("")
也会产生这种效果 。
只是稍微扩展@ 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(".")