Server.MapPath (“.”), Server.MapPath (“ ~”), Server.MapPath (@“ \”), Server.MapPath (“ /”) อะไรคือความแตกต่าง?


คำตอบ:


809

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

เชิงอรรถ

  1. Server.MapPath(null)และServer.MapPath("")จะสร้างผลกระทบนี้เช่นกัน

44
ยอดเยี่ยม เราได้ต่อสู้กับ Server.Bloody.MapPath แล้ว ขอบคุณ
gbn

26
คุณจะใช้งานได้ดีขึ้นHostingEnvironment.MapPathเนื่องจากไม่ต้องการHttpContext: stackoverflow.com/q/944219/3205
skolima

25

เพียงเพื่อขยายคำตอบของ @ 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(".")


4

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

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