2010-12-30 50 views

Trả lời

18

Nó được nó từ đây:

VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath); 

Đây là kết quả phản xạ cho PathHelpers lớp trong System.Web.Mvc DLL:

private static string GenerateClientUrlInternal(HttpContextBase httpContext, string contentPath) 
{ 
    if (string.IsNullOrEmpty(contentPath)) 
    { 
     return contentPath; 
    } 
    if (contentPath[0] == '~') 
    { 
     string virtualPath = VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath); 
     string str2 = httpContext.Response.ApplyAppPathModifier(virtualPath); 
     return GenerateClientUrlInternal(httpContext, str2); 
    } 
    NameValueCollection serverVariables = httpContext.Request.ServerVariables; 
    if ((serverVariables == null) || (serverVariables["HTTP_X_ORIGINAL_URL"] == null)) 
    { 
     return contentPath; 
    } 
    string relativePath = MakeRelative(httpContext.Request.Path, contentPath); 
    return MakeAbsolute(httpContext.Request.RawUrl, relativePath); 
} 
+0

câu hỏi của tôi dựa trên vấn đề này "http://stackoverflow.com/questions/4563043/root-path-with-tilde-does-not-change-upper-case-to-lower-case" để xem liên kết " http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility.aspx ", tôi nghĩ rằng vấn đề không phải là trong asp.net-mvc, nhưng trong IIS. Cảm ơn –

1

ASP.Net dịch dấu ngã (~) với thư mục gốc của ứng dụng trong mọi điều khiển runat = server. Nó tương đương với thuộc tính HttpRuntime.AppDomainAppVirtualPath.

+0

Không, nó không phải là tương đương. AppDomainAppVirtualPath là "Đường dẫn ảo của thư mục chứa ứng dụng được lưu trữ trong miền ứng dụng hiện tại" (thư mục ảo). Nó chắc chắn không giống với thư mục gốc của ứng dụng, ít nhất là từ IIS7. –

2

Xem MSDN:Web Project Paths

ASP.NET bao gồm các nhà điều hành ứng dụng Web root (~), mà bạn có thể sử dụng khi xác định một đường dẫn trong máy chủ điều khiển. ASP.NET giải quyết toán tử ~ vào thư mục gốc của ứng dụng hiện tại. Bạn có thể sử dụng toán tử ~ kết hợp với các thư mục để chỉ định đường dẫn dựa trên gốc hiện tại .

Về cơ bản, mục đích của dấu ngã là để bạn có thể có đường dẫn giải quyết đúng cách ngay cả khi bạn triển khai trang web của mình đến các địa điểm khác nhau. Đường dẫn tương đối không thể thực hiện điều này dễ dàng vì các điều khiển có thể được hiển thị trong các thư mục khác nhau trong trang web của bạn. Đường dẫn tuyệt đối không thể thực hiện điều này vì trang web của bạn có thể được triển khai đến các vị trí khác nhau - nếu không có gì khác, đây là trường hợp triển khai thử nghiệm được thực hiện cục bộ so với triển khai bản phát hành cho máy chủ trực tiếp.

Server.MapPath có thể được sử dụng vì những lý do tương tự.

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