有谁能解释一下Server.MapPath("."),Server.MapPath("~"),Server.MapPath(@"\")和Server.MapPath("/")之间的区别吗?
Server.MapPath(".")
Server.MapPath("~")
Server.MapPath(@"\")
Server.MapPath("/")
p4rjhz4m1#
Server.MapPath指定要Map到物理目录的相对或虚拟路径。
Server.MapPath("..")
假设您将网站应用程序(http://www.example.com/)指向
http://www.example.com/
C:\Inetpub\wwwroot
字符串并将您的商店应用程序(子网站作为IIS中的虚拟目录,标记为应用程序)安装在
D:\WebApps\shop
型例如,如果在以下请求中调用Server.MapPath():
Server.MapPath()
http://www.example.com/shop/products/GetProduct.aspx?id=2342
型然后:
D:\WebApps\shop\products
Server.MapPath("/shop")
如果Path以正斜杠(/)或反斜杠(\)开头,则MapPath()将返回一个路径,就好像Path是一个完整的虚拟路径。如果Path不是以斜杠开头,则MapPath()返回一个相对于正在处理的请求的目录的路径。
/
\
MapPath()
@
Server.MapPath(null)
Server.MapPath("")
nlejzf6q2#
只是为了扩展@splattne的回答:MapPath(string virtualPath)调用以下代码:
MapPath(string virtualPath)
public string MapPath(string virtualPath) { return this.MapPath(VirtualPath.CreateAllowNull(virtualPath)); }
字符串MapPath(VirtualPath virtualPath)依次调用MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping),其中包含以下内容:
MapPath(VirtualPath virtualPath)
MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
//... if (virtualPath == null) { virtualPath = VirtualPath.Create("."); } //...
型因此,如果调用MapPath(null)或MapPath(""),实际上就是调用MapPath(".")
MapPath(null)
MapPath("")
MapPath(".")
vjhs03f73#
1)Server.MapPath(".")--返回文件的“当前物理目录”(例如aspx)正在执行。例:假设D:\WebApplications\Collage\Departments2)Server.MapPath("..")--返回“父目录”例如D:\WebApplications\Collage3)Server.MapPath("~")--返回“应用程序根目录的物理路径”例如D:\WebApplications\Collage4)Server.MapPath("/")--返回到域名根的物理路径例如C:\Inetpub\wwwroot
aspx
D:\WebApplications\Collage\Departments
D:\WebApplications\Collage
cs7cruho4#
工作示例,希望这有助于展示使用MapPath的方法,而不仅仅是一个“/”。我们正在组合“/”和“~”。
4条答案
按热度按时间p4rjhz4m1#
Server.MapPath指定要Map到物理目录的相对或虚拟路径。
Server.MapPath(".")
1返回文件的当前物理目录(例如aspx)正在执行Server.MapPath("..")
返回父目录Server.MapPath("~")
返回到应用程序根的物理路径Server.MapPath("/")
返回到域名根的物理路径(不一定与应用程序的根相同)假设您将网站应用程序(
http://www.example.com/
)指向字符串
并将您的商店应用程序(子网站作为IIS中的虚拟目录,标记为应用程序)安装在
型
例如,如果在以下请求中调用
Server.MapPath()
:型
然后:
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()
返回一个相对于正在处理的请求的目录的路径。@
是逐字字符串操作符,这意味着字符串应该“按原样”使用,而不是进行转义序列处理。Server.MapPath(null)
和Server.MapPath("")
将produce this effect too。nlejzf6q2#
只是为了扩展@splattne的回答:
MapPath(string virtualPath)
调用以下代码:字符串
MapPath(VirtualPath virtualPath)
依次调用MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
,其中包含以下内容:型
因此,如果调用
MapPath(null)
或MapPath("")
,实际上就是调用MapPath(".")
vjhs03f73#
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
cs7cruho4#
工作示例,希望这有助于展示使用MapPath的方法,而不仅仅是一个“/”。我们正在组合“/”和“~”。