2012-02-01 19 views
40

Tôi đang cố gắng để có được một url asp.net điển hình bắt đầu bằng dấu ngã ('~') để phân tích cú pháp thành url chính xác bắt đầu bằng "http:"Lấy URL đầy đủ từ URL có dấu ngã (~)

tôi có chuỗi này "~/PageB.aspx"

và tôi muốn làm cho nó trở thành "http://myServer.com/PageB.aspx"

tôi biết có một số phương pháp để phân tích url và nhận được đường dẫn khác nhau của máy chủ và ứng dụng và ví dụ . Tôi đã thử một số nhưng không nhận được kết quả tôi muốn.

Trả lời

16

Nếu bạn đang ở trong một handler trang web mà bạn luôn luôn có thể sử dụng phương pháp ResolveUrl để chuyển đổi các đường dẫn tương đối đến một đường dẫn cụ thể máy chủ. Nhưng nếu bạn muốn "http : //www.yourserver.se" một phần, bạn sẽ phải thêm Request.Url.SchemeRequest.Url.Authority vào đó.

66

Thử

System.Web.VirtualPathUtility.ToAbsolute("yourRelativePath"); 

Có nhiều cách khác nhau mà có sẵn trong ASP.NET mà chúng ta có thể sử dụng để giải quyết đường dẫn tương đối đến một tài nguyên trên server-side và làm cho nó có sẵn trên client-side. Tôi biết 4 cách -

1) Request.ApplicationPath 
2) System.Web.VirtualPathUtility 
3) Page.ResolveUrl 
4) Page.ResolveClientUrl 

Tốt bài viết: Different approaches for resolving URLs in ASP.NET

+0

Lưu ý rằng http://refactoringaspnet.blogspot.com/2009/09/different-approaches-for-resolving-urls.html article _claims_ "VirtualPathUtility sẽ ném một lỗi nếu có tham số chuỗi truy vấn trong URL", nhưng tôi thấy rằng nó _does_ hoạt động chính xác thậm chí bằng Chuỗi truy vấn. – JonBrave

8
string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl)); 
+0

thông tin bổ sung: Nếu bạn cần số cổng, hãy sử dụng nó. string.Format ("http: // {0} {1}", Request.Url.Authority, Page.ResolveUrl (relativeUrl)) – user3035005

+0

Điều này rất hữu ích, tuy nhiên, tôi đã sử dụng "Href()" trong Razor thay vì Page.ResolveUrl() vì nó ném một ngoại lệ tham chiếu null. – neoscribe

4

Phương pháp này có vẻ đẹp nhất đối với tôi. Không có thao tác chuỗi, nó có thể chịu đựng cả URL tương đối hoặc tuyệt đối làm đầu vào và nó sử dụng chính xác cùng một lược đồ, quyền hạn, cổng và đường dẫn gốc như bất kỳ yêu cầu hiện tại nào đang sử dụng:

private Uri GetAbsoluteUri(string redirectUrl) 
{ 
    var redirectUri = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); 

    if (!redirectUri.IsAbsoluteUri) 
    { 
     redirectUri = new Uri(new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath), redirectUri); 
    } 

    return redirectUri; 
} 
+0

Nếu bạn trộn thông tin trên với thông tin này, 'System.Web.VirtualPathUtility.ToAbsolute ("yourRelativePath"); 'để giải quyết đường dẫn' ~/', sau đó sử dụng phương thức này trên kết quả chuỗi đó. Nó hoạt động. (giả sử không phải là thông tin cổng là cần thiết) Sự kết hợp của những làm việc cho tôi. – DiamondDrake

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