2008-11-09 66 views

Trả lời

752

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

  • Server.MapPath(".") trả về thư mục hiện vật lý của tập tin (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ý vào 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 như thư mục gốc của ứng dụng)

Một ví dụ:

Hãy nói rằng bạn chỉ một ứng dụng web site (http://www.example.com/) để

C:\Inetpub\wwwroot 

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

D:\WebApps\shop 

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

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

thì:

  • Server.MapPath(".") lợi nhuận D:\WebApps\shop\products
  • Server.MapPath("..") lợi nhuận D:\WebApps\shop
  • Server.MapPath("~") lợi nhuận D:\WebApps\shop
  • Server.MapPath("/") lợi nhuận C:\Inetpub\wwwroot
  • Server.MapPath("/shop") lợi nhuận D:\WebApps\shop

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

Nếu đường dẫn không bắt đầu bằng dấu gạch chéo, thì MapPath() sẽ trả lại đường dẫn tương ứng với thư mục của yêu cầu đang được xử lý.

Lưu ý: trong C#, @ là toán tử chuỗi chữ đúng 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 chuỗi thoát.

Chú thích

  1. Server.MapPath(null)Server.MapPath("") sẽ produce this effect too.
+40

Tuyệt vời. Chúng tôi đã chiến đấu với Server.Bloody.MapPath. Cảm ơn – gbn

+22

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

20

Chỉ cần mở rộng về câu trả lời @ 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 gọi MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping) chứa sau:

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

Vì vậy, nếu bạn gọi MapPath(null) hoặc MapPath(""), bạn đang thực hiện ectively gọi MapPath(".")

1

1) Server.MapPath (".") - Trả về "Danh 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 \ Sở

2) Server.MapPath ("..") - Trả về "Directory Chánh"

Ex. D: \ webapplications \ Collage

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

Ex. D: \ webapplications \ Collage

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

Ex. C: \ Inetpub \ wwwroot

Các vấn đề liên quan