Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"\")、Server.Ma
Posted
技术标签:
【中文标题】Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"\\")、Server.MapPath("/")。有啥区别?【英文标题】:Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). What is the difference?Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"\")、Server.MapPath("/")。有什么区别? 【发布时间】:2010-09-21 12:08:11 【问题描述】:谁能解释Server.MapPath(".")
、Server.MapPath("~")
、Server.MapPath(@"\")
和Server.MapPath("/")
之间的区别?
【问题讨论】:
【参考方案1】: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。
【讨论】:
优秀。我们一直在与 Server.Bloody.MapPath 作斗争。谢谢 你最好使用HostingEnvironment.MapPath
,因为它不需要HttpContext
:***.com/q/944219/3205
两个问题,如下: (1.) Server.MapPath 的 ASP Classic 版本的工作方式是否与上述相同?并且 (2.) 我在服务器中安装了一个 SSD 驱动器,它的驱动器号是“G:”该网站位于驱动器号“E:”上我希望 IMAGES 目录(可能还有其他目录)驻留在G: 驱动器(用于速度),但 Server.MapPath 在代码中使用时返回 E:。它已经是一个指向 E: 驱动器的虚拟目录。如果我将它指向 G: 驱动器,我如何通知 Server.MapPath 将正确的驱动器号返回到 IMAGES 文件夹?【参考方案2】:
只是为了稍微扩展@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(".")
【讨论】:
【参考方案3】: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
【讨论】:
以上是关于Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"\")、Server.Ma的主要内容,如果未能解决你的问题,请参考以下文章
HttpContext.Current.Server.MapPath("/") 未将对象设置到对象的实例异常。