任何人都可以解释Server.MapPath(".")
,Server.MapPath("~")
,Server.MapPath(@"\")
和Server.MapPath("/")
之间的区别吗?
答案 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#中,@
是逐字文字字符串运算符,意味着字符串应“按原样”使用,不能为转义序列处理。
脚注
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