2009-06-03 44 views
148

Có sự khác biệt nào giữa Server.MapPath()HostingEnvironment.MapPath() không? Không Server.MapPath() có bất kỳ lợi thế nào trên HostingEnvironment.MapPath() không?Sự khác nhau giữa Server.MapPath và HostingEnvironment.MapPath là gì?

Vấn đề ban đầu của tôi là ánh xạ đường dẫn tệp trên máy chủ khi không có HttpContext và tôi không thể chuyển biến số Server từ Global.asax sang phương thức của mình.

Tôi đã sử dụng HostingEnvironment.MapPath() thay vì không cần HttpContext. Có bất kỳ tình huống nào khi hai phương pháp này đưa ra các kết quả khác nhau không?

Trả lời

174

Server.MapPath() cuối cùng gọi HostingEnvironment.MapPath(), nhưng nó tạo ra một đối tượng VirtualPath với các tùy chọn cụ thể:

Đối tượng VirtualPath truyền cho HostingEnvironment.MapPath() được xây dựng như thế này:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull); 

Sửa: trong thực tế, sự khác biệt duy nhất là bạn được phép chuyển giá trị rỗng tới Server.MapPath(), nhưng không phải là HostingEnvironment.MapPath()

+2

Vì vậy, tôi sẽ luôn nhận được kết quả giống nhau từ cả hai phương pháp, đúng không? (không bao gồm đối số null) – empi

+2

có, bạn sẽ. –

+48

** TL; DR **: luôn sử dụng 'HostingEnvironment.MapPath()' để giữ sự tỉnh táo. (+1) –

99

Server.MapPath() yêu cầu HttpContext. HostingEnvironment.MapPath thì không.

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