В чем разница между 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.