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

emp*_*mpi 168 c# asp.net

有什么区别Server.MapPath()HostingEnvironment.MapPath()?是否Server.MapPath()有任何优势了HostingEnvironment.MapPath()

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

我用HostingEnvironment.MapPath()它代替,因为它不需要HttpContext.有这两种方法会产生不同结果的情况吗?

Phi*_*ert 201

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

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

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);
Run Code Online (Sandbox Code Playgroud)

编辑:实际上,唯一的区别是你被允许传递null Server.MapPath(),但不是HostingEnvironment.MapPath()

  • **TL; DR**:始终使用`HostingEnvironment.MapPath()`来保持理智.(1) (58认同)
  • 因为`Server.MapPath("myFolder")`工作正常但是为了与HostingEnvironment获得相同的结果,我必须使用`HostingEnvironment.MapPath("〜/ myFolder")`. (14认同)
  • 实际上还有另一个区别 - HostingEnvironment.MapPath不允许使用相对路径(例如Image/pict.png). (9认同)
  • 所以我总是从这两种方法得到相同的结果,对吧?(不包括null参数) (2认同)

Mar*_*ski 110

Server.MapPath()需要一个HttpContext.HostingEnvironment.MapPath才不是.

  • 但是两者都需要“System.Web”,所以它们可以与自托管 OWIN 环境一起使用吗? (2认同)