Bất cứ ai có thể giải thích sự khác biệt giữa Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
và Server.MapPath("/")
?Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ ""), Server.MapPath ("/"). Sự khác biệt là gì?
Trả lời
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 thiServer.MapPath("..")
trả về thư mục chaServer.MapPath("~")
trả về đường dẫn vật lý vào 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 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ậnD:\WebApps\shop\products
Server.MapPath("..")
lợi nhuậnD:\WebApps\shop
Server.MapPath("~")
lợi nhuậnD:\WebApps\shop
Server.MapPath("/")
lợi nhuậnC:\Inetpub\wwwroot
Server.MapPath("/shop")
lợi nhuậnD:\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
Server.MapPath(null)
vàServer.MapPath("")
sẽ produce this effect too.
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) 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
- 1. Sự khác nhau giữa Server.MapPath và HostingEnvironment.MapPath là gì?
- 2. Server.Mappath trong C# classlibrary
- 3. Server.MapPath đi hai thư mục trở lại từ gốc
- 4. Làm thế nào để sử dụng Server.MapPath khi HttpContext .Current là Không có gì
- 5. Sử dụng Server.MapPath trong các lớp C# bên ngoài trong ASP.NET
- 6. Microsoft Web API: Bạn làm thế nào để thực hiện một Server.MapPath?
- 7. Tôi có thể sử dụng Server.MapPath() từ global.asax như thế nào?
- 8. Sử dụng Server.MapPath() bên trong một trường tĩnh trong ASP.NET MVC
- 9. Làm cách nào để sử dụng Server.MapPath bên trong dự án thư viện lớp học
- 10. DTO và BO là gì? Sự khác biệt là gì?
- 11. Flash.discard làm gì? Sự khác biệt giữa flash.clear() là gì?
- 12. Sự khác biệt giữa JavaBean và POJO là gì?
- 13. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 14. Tùy chọn Android - sự khác biệt là gì?
- 15. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 16. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 17. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 18. Sự khác biệt giữa DBI và DBD là gì?
- 19. Sự khác biệt giữa NSInvocation và chặn là gì?
- 20. Jam vs Bower, sự khác biệt là gì?
- 21. Sự khác biệt giữa fn và fn * là gì?
- 22. Sự khác biệt giữa xtype và bí danh là gì?
- 23. EQU so với DC.B. Sự khác biệt là gì?
- 24. Sự khác biệt giữa hai câu lệnh này là gì
- 25. Sự khác biệt giữa build.sbt và build.scala là gì?
- 26. tê giác Mocks: Stub & Mocks. Sự khác biệt là gì
- 27. Sự khác biệt giữa localname và qname là gì?
- 28. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 29. Sự khác biệt giữa while (true) và loop là gì?
- 30. Sự khác biệt giữa dealloc và viewdidunload là gì?
Tuyệt vời. Chúng tôi đã chiến đấu với Server.Bloody.MapPath. Cảm ơn – gbn
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