ทุกคนสามารถอธิบายความแตกต่างระหว่าง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\productsServer.MapPath("..") ผลตอบแทน D:\WebApps\shopServer.MapPath("~") ผลตอบแทน D:\WebApps\shopServer.MapPath("/") ผลตอบแทน C:\Inetpub\wwwrootServer.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