В чем разница между Server.MapPath и HostingEnvironment.MapPath?

174

Есть ли разница между Server.MapPath()и HostingEnvironment.MapPath()? Есть ли Server.MapPath()какие-либо преимущества перед HostingEnvironment.MapPath()?

Первоначальной проблемой было сопоставление пути к файлу на сервере, когда его HttpContextнет, и я не могу передать Serverпеременную из Global.asaxмоего метода.

Я использовал HostingEnvironment.MapPath()вместо этого, так как это не нужно HttpContext. Есть ли ситуации, когда эти два метода дадут разные результаты?

ЭМПИ
источник

Ответы:

204

Server.MapPath()в конце концов вызывает HostingEnvironment.MapPath(), но создает VirtualPathобъект с конкретными параметрами:

Переданный VirtualPathобъект HostingEnvironment.MapPath()построен следующим образом:

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

Изменить : на самом деле, единственная разница в том, что вам разрешено передавать ноль Server.MapPath(), но неHostingEnvironment.MapPath()

Филипп Лейбер
источник
2
Так что я всегда получу одинаковые результаты от обоих методов, верно? (исключая нулевой аргумент)
empi
61
TL; DR : всегда использовать, HostingEnvironment.MapPath()чтобы сохранить здравомыслие. (+1)
Крис Марисик
15
Там должно быть что-то другое, кроме нуля, потому что Server.MapPath("myFolder")работает нормально, но чтобы получить тот же результат с HostingEnvironment, мне пришлось использовать HostingEnvironment.MapPath("~/myFolder").
Styfle
Фантастический ответ для запуска сеанса FTP через звонок в веб-сервис. Спас меня сегодня огромное !!!
htm11h
10
На самом деле есть еще одно отличие - относительные пути (например, Image / pict.png) не разрешены с HostingEnvironment.MapPath.
NetMage
113

Server.MapPath()требует HttpContext. HostingEnvironment.MapPathне.

Марк Струзинский
источник
2
но оба требуют, System.Webчтобы они работали со средами Self Hosted OWIN?
vibs2006