Server.MapPath (ăn vặt, trực tuyến) Sự khác biệt là gì?


446

Bất cứ ai có thể giải thích sự khác biệt giữa Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\")Server.MapPath("/")?

Câu trả lời:


809

Server.MapPath chỉ định đường dẫn tương đối hoặc ảo để ánh xạ tới thư mục vật lý .

  • Server.MapPath(".")1 trả về thư mục vật lý hiện tại của tệp (ví dụ: aspx) đang được thực thi
  • Server.MapPath("..") trả về thư mục cha
  • Server.MapPath("~") trả về đường dẫn vật lý đến thư mục gốc của ứng dụng
  • Server.MapPath("/") trả về đường dẫn vật lý đến thư mục gốc của tên miền (không nhất thiết phải giống với thư mục gốc của ứng dụng)

Một ví dụ:

Giả sử bạn đã trỏ một ứng dụng trang web ( http://www.example.com/) tới

C:\Inetpub\wwwroot

và cài đặt ứng dụng cửa hàng của bạn (web phụ dưới dạng thư mục ảo trong IIS, được đánh dấu là ứng dụng) trong

D:\WebApps\shop

Ví dụ: nếu bạn gọi Server.MapPath()trong yêu cầu sau:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

sau đó:

  • Server.MapPath(".")1 trả lạiD:\WebApps\shop\products
  • Server.MapPath("..") trả lại D:\WebApps\shop
  • Server.MapPath("~") trả lại D:\WebApps\shop
  • Server.MapPath("/") trả lại C:\Inetpub\wwwroot
  • Server.MapPath("/shop") trả lại D:\WebApps\shop

Nếu Đường dẫn bắt đầu bằng dấu gạch chéo ( /) hoặc dấu gạch chéo ngược ( \), MapPath()đường dẫn trả về một đường dẫn như thể Đường dẫn là đường dẫn ảo đầy đủ.

Nếu Đường dẫn không bắt đầu bằng dấu gạch chéo, MapPath()đường dẫn trả về một đường dẫn liên quan đến thư mục của yêu cầu đang được xử lý.

Lưu ý: trong C #, @là toán tử chuỗi nguyên văn có nghĩa là chuỗi nên được sử dụng "nguyên trạng" và không được xử lý cho các chuỗi thoát.

Chú thích

  1. Server.MapPath(null)Server.MapPath("")sẽ tạo ra hiệu ứng này quá .

44
Thông minh. Chúng tôi đã chiến đấu với Server.Bloody.MapPath. Cảm ơn
gbn

26
Bạn sẽ tốt hơn khi sử dụng HostingEnvironment.MapPathvì nó không yêu cầu HttpContext: stackoverflow.com/q/944219/3205
skolima

25

Chỉ cần mở rộng câu trả lời của @ splattne một chút:

MapPath(string virtualPath) gọi như sau:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath)lần lượt các cuộc gọi MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)có chứa các mục sau:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

Vì vậy, nếu bạn gọi MapPath(null)hoặc MapPath(""), bạn đang gọi một cách hiệu quảMapPath(".")


4

1) Server.MapPath(".")- Trả về "Thư mục vật lý hiện tại" của tệp (ví dụ aspx) đang được thực thi.

Ví dụ. Giả sử D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Trả về "Thư mục gốc"

Ví dụ. D:\WebApplications\Collage

3) Server.MapPath("~")- Trả về "Đường dẫn vật lý đến thư mục gốc của ứng dụng"

Ví dụ. D:\WebApplications\Collage

4) Server.MapPath("/")- Trả về đường dẫn vật lý đến thư mục gốc của Tên miền

Ví dụ. C:\Inetpub\wwwroot

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.