ความแตกต่างระหว่าง 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
ดังนั้นฉันจะได้ผลลัพธ์เดียวกันจากทั้งสองวิธีเสมอไหม (ไม่รวมอาร์กิวเมนต์ null)
empi

61
TL; DR : ใช้HostingEnvironment.MapPath()เพื่อรักษาสติอยู่เสมอ (+1)
Chris Marisic

15
ต้องมีบางสิ่งบางอย่างที่แตกต่างกันเกินกว่า null เพราะServer.MapPath("myFolder")ผลงานดี แต่เพื่อให้ได้ผลเช่นเดียวกันกับ HostingEnvironment HostingEnvironment.MapPath("~/myFolder")ผมต้องใช้
สไตล์

คำตอบที่ยอดเยี่ยมสำหรับการเริ่มต้นเซสชัน ftp ผ่านการโทรไปยังบริการเว็บ ช่วยฉันได้มากในวันนี้ !!!
htm11h

10
ที่จริงแล้วมีความแตกต่างอื่น ๆ - ไม่อนุญาตให้ใช้พา ธ ที่เกี่ยวข้อง (เช่นรูปภาพ / pict.png) กับ HostingEnvironment.MapPath
NetMage

113

Server.MapPath()HttpContextต้องมี HostingEnvironment.MapPathไม่.


2
แต่ทั้งคู่ต้องการSystem.Webเช่นนั้นพวกเขาจะทำงานกับสภาพแวดล้อม OWIN ของ Self Hosted หรือไม่
vibs2006
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.