Чим відрізняється 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);

Редагувати : насправді, різниця полягає лише в тому, що вам дозволяється передавати null до Server.MapPath(), але не до цьогоHostingEnvironment.MapPath()


2
Тож я завжди отримаю однакові результати від обох методів, правда? (виключаючи нульовий аргумент)
empi

61
TL; DR : завжди використовуйте HostingEnvironment.MapPath()для збереження розуму. (+1)
Кріс Марісіч

15
Має бути щось інше поза нульовим, тому що Server.MapPath("myFolder")працює чудово, але щоб отримати такий же результат з HostingEnvironment, мені довелося використовувати HostingEnvironment.MapPath("~/myFolder").
стайф

Фантастична відповідь на ініціювання сеансу ftp через дзвінок у веб-службу. Врятував мене сьогодні величезним !!!
htm11h

10
Насправді є ще одна відмінність - відносні шляхи (наприклад, Image / Pict.png) заборонені за допомогою HostingEnvironment.MapPath.
NetMage

113

Server.MapPath()вимагає HttpContext. HostingEnvironment.MapPathне.


2
але обидва цього вимагають, System.Webчи працюватимуть вони з власними середовищами OWIN?
vibs2006
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.