Server.MapPath和HostingEnvironment.MapPath有什么区别?


174

有什么区别Server.MapPath()HostingEnvironment.MapPath()?相比Server.MapPath()有什么优势HostingEnvironment.MapPath()吗?

我最初的问题是,当HttpContext不存在服务器映射文件路径时,无法将Server变量从传递Global.asax给我的方法。

HostingEnvironment.MapPath()改用了它,因为它不需要HttpContext。这两种方法在任何情况下都会产生不同的结果吗?

Answers:


204

Server.MapPath()最终调用HostingEnvironment.MapPath(),但它创建VirtualPath具有特定选项的对象:

VirtualPath传递给的对象HostingEnvironment.MapPath()是这样构造的:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

编辑:实际上,唯一的区别是您可以将null传递给Server.MapPath(),但不允许传递给HostingEnvironment.MapPath()


2
因此,我总是会从两种方法中获得相同的结果,对吗?(不包括null参数)
empi,2009年

61
TL; DR:始终HostingEnvironment.MapPath()保持理智。(+1)
克里斯·马里西奇

15
除了null之外,还必须存在其他一些不同的东西,因为它Server.MapPath("myFolder")可以正常工作,但是要与HostingEnvironment获得相同的结果,我必须使用HostingEnvironment.MapPath("~/myFolder")
styfle 2012年

通过调用Web服务启动ftp会话的绝佳答案。今天救了我一大堆!!!
htm11h 2014年

10
实际上还有另一个区别-HostingEnvironment.MapPath不允许相对路径(例如Image / pict.png)。
NetMage 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.