Câu trả lời:
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 thiServer.MapPath("..")
trả về thư mục chaServer.MapPath("~")
trả về đường dẫn vật lý đến thư mục gốc của ứng dụngServer.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
Server.MapPath(null)
và Server.MapPath("")
sẽ tạo ra hiệu ứng này quá .HostingEnvironment.MapPath
vì nó không yêu cầu HttpContext
: stackoverflow.com/q/944219/3205
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(".")
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