ทุกคนสามารถอธิบายความแตกต่างระหว่างServer.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
และServer.MapPath("/")
?
ทุกคนสามารถอธิบายความแตกต่างระหว่างServer.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
และServer.MapPath("/")
?
คำตอบ:
Server.MapPathระบุเส้นทางญาติหรือเสมือนแผนที่ไปยังไดเรกทอรีทางกายภาพ
Server.MapPath(".")
1ส่งคืนฟิสิคัลไดเร็กทอรีปัจจุบันของไฟล์ (เช่น aspx) ที่ถูกเรียกใช้งานServer.MapPath("..")
ส่งคืนไดเรกทอรีหลักServer.MapPath("~")
ส่งคืนพา ธ ฟิสิคัลไปที่รูทของแอปพลิเคชันServer.MapPath("/")
ส่งคืนพา ธ ฟิสิคัลไปยังรูทของชื่อโดเมน (ไม่จำเป็นต้องเหมือนกับรูทของแอปพลิเคชัน)ตัวอย่าง:
สมมติว่าคุณชี้แอปพลิเคชันเว็บไซต์ ( http://www.example.com/
) ไปที่
C:\Inetpub\wwwroot
และติดตั้งแอปพลิเคชันร้านค้าของคุณ (เว็บย่อยเป็นไดเรกทอรีเสมือนใน IIS ทำเครื่องหมายเป็นแอปพลิเคชัน) ใน
D:\WebApps\shop
ตัวอย่างเช่นถ้าคุณโทรServer.MapPath()
ตามคำขอ:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
แล้ว:
Server.MapPath(".")
ผลตอบแทน1D:\WebApps\shop\products
Server.MapPath("..")
ผลตอบแทน D:\WebApps\shop
Server.MapPath("~")
ผลตอบแทน D:\WebApps\shop
Server.MapPath("/")
ผลตอบแทน C:\Inetpub\wwwroot
Server.MapPath("/shop")
ผลตอบแทน D:\WebApps\shop
ถ้า Path เริ่มต้นด้วย forward slash ( /
) หรือ backward slash ( \
) การMapPath()
ส่งคืนพา ธ ราวกับว่า Path เป็นพา ธ แบบเต็มและเสมือน
หาก Path ไม่ได้เริ่มต้นด้วยเครื่องหมายสแลชMapPath()
จะส่งคืนพา ธ ที่สัมพันธ์กับไดเรกทอรีของคำขอที่กำลังประมวลผล
หมายเหตุ: ใน C # @
เป็นตัวดำเนินการสตริงตัวอักษรแบบ verbatim ซึ่งหมายความว่าควรใช้สตริง "as is" และไม่ถูกประมวลผลสำหรับ escape sequences
เชิงอรรถ
Server.MapPath(null)
และServer.MapPath("")
จะสร้างผลกระทบนี้เช่นกันHostingEnvironment.MapPath
เนื่องจากไม่ต้องการHttpContext
: stackoverflow.com/q/944219/3205
เพียงเพื่อขยายคำตอบของ @ splattne เพียงเล็กน้อย:
MapPath(string virtualPath)
โทรต่อไปนี้:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)
ในการเปิดสายMapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
ซึ่งมีดังต่อไปนี้:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
ดังนั้นถ้าคุณโทรMapPath(null)
หรือMapPath("")
คุณกำลังโทรอย่างมีประสิทธิภาพMapPath(".")
1) Server.MapPath(".")
- ส่งคืน "ไดเรกทอรีทางกายภาพปัจจุบัน" ของไฟล์ (เช่นaspx
) ที่กำลังดำเนินการ
อดีต สมมติ D:\WebApplications\Collage\Departments
2) Server.MapPath("..")
- ส่งคืน "ไดเรกทอรีหลัก"
อดีต D:\WebApplications\Collage
3) Server.MapPath("~")
- ส่งคืน "เส้นทางกายภาพไปยังรูทของแอปพลิเคชัน"
อดีต D:\WebApplications\Collage
4) Server.MapPath("/")
- คืนค่าเส้นทางกายภาพไปยังรูทของชื่อโดเมน
อดีต C:\Inetpub\wwwroot