2009-05-31 34 views
31

Làm cách nào để biết đường dẫn ảo hoàn chỉnh mà ứng dụng của tôi hiện được lưu trữ? Ví dụ:Làm thế nào để tôi có được đường dẫn ảo hoàn chỉnh của ứng dụng ASP.NET

http://www.mysite.com/myApp 

hoặc

http://www.mysite.com/myApp/mySubApp 

tôi biết con đường áp dụng HttpRequest nhưng nó chỉ trả về tên thư mục mà ứng dụng của tôi hiện đang lưu trữ, nhưng làm thế nào để tôi có được một phần ban đầu?

Trả lời

71

Phần tên miền của đường dẫn không thực sự là thuộc tính của ứng dụng, nhưng phụ thuộc vào URL yêu cầu. Bạn có thể truy cập một trang web từ nhiều tên máy chủ khác nhau. Để có được tên miền liên quan đến việc yêu cầu hiện tại, cùng với đường dẫn ảo của ứng dụng hiện tại, bạn có thể làm:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath 

Về mặt kỹ thuật, một "ứng dụng" là một thư mục ảo được định nghĩa trong IIS và Request.ApplicationPath lợi nhuận chính xác đó. Nếu bạn muốn nhận được các thư mục trong đó hiện tại yêu cầu được xử lý, bạn có thể làm điều này:

VirtualPathUtility.GetDirectory(Request.Path) 

ASP.NET không có ý tưởng làm thế nào để phân biệt sub-ứng dụng của bạn từ một ứng dụng lớn hơn nếu nó không được định nghĩa như một thư mục ảo trong IIS. Nếu không đăng ký trong IIS, nó chỉ nhìn thấy toàn bộ điều như một ứng dụng duy nhất.

+2

Và nếu ứng dụng là một thư mục ảo trong IIS, nhưng trang mà chúng tôi yêu cầu là bên trong một vài thư mục, nhưng chúng tôi muốn đường dẫn bao gồm thư mục ảo nhưng không phải thư mục, làm thế nào để làm điều này ? – Krunal

+1

@Krunal [HttpRuntime.AppDomainAppVirtualPath] (https://msdn.microsoft.com/en-us/library/system.web.httpruntime.appdomainappvirtualpath (v = vs.110) .aspx) hoặc Request.ApplicationPath – jproch

2

Cố gắng này (đã không thử nó)

public string GetVirtualPath(string physicalPath) 
{ 
string rootpath = Server.MapPath("~/"); 
physicalPath = physicalPath.Replace(rootpath, ""); 
physicalPath = physicalPath.Replace("\\", "/"); 
return "~/" + physicalPath; 
} 

Link 1

Link 2

1

Để trả lời đầy đủ câu hỏi này tôi nghĩ rằng bạn cần phải mô tả những gì bạn thực sự cố gắng làm và những gì là làm cho giá trị đường dẫn của bạn "không xác định"

Thông thường khi tôi đang chạy vào Path, tìm kiếm sự cố bài đăng trên blog này của Rick Strahl cle ars những thứ lên cho tôi: http://www.west-wind.com/weblog/posts/269.aspx

Có thể phải trộn và kết hợp để có được những gì bạn muốn.

+0

Các liên kết được chia –

18
Request.Url 

nó có chứa một số điểm mà bạn có thể cân nhắc sử dụng, xem hình dưới đây:

enter image description here

3

Mã dưới đây sẽ giải quyết mục đích, tuy nhiên bạn phải làm một điều chỉnh chút cho hai các loại tình huống:

  1. Được lưu trữ dưới dạng ứng dụng web riêng biệt.
  2. Được lưu trữ dưới dạng ứng dụng ảo trong ứng dụng web.

    HttpContext.Current.Request.Url.GetLeftPart (UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

6

Trong .NET 4.5

VirtualPathUtility.ToAppRelative(path) 
Các vấn đề liên quan