2009-06-22 20 views
8

Tôi có một url như example.com/page?a=1&ret=/user/page2.Phân tách URL trong C#?

Tôi đã sử dụng string.split ('/') để tìm ra các đường dẫn nhưng trường hợp này bạn có thể thấy nó không phải là rất hữu ích. Làm cách nào để tách URL để tôi có thể nhận được đường dẫn trang?

Trả lời

25

Nếu bạn thực hiện một đối tượng System.Uri từ chuỗi của bạn, nó sẽ có một vài thuộc tính cho các bộ phận khác nhau của con đường:

string path = "http://example.com/page?a=1&ret=/user/page2"; 
Uri uri = new Uri(path); 
Console.WriteLine(uri.AbsolutePath); // Prints "/page" 
+0

Tôi nghĩ rằng ông muốn các bit page2 , bởi vì anh ấy nói anh ta sẽ chia tay lại '?' ... –

4

Đối tượng Request.Url (Uri) có rất nhiều thuộc tính hữu ích liên quan đến đường dẫn. Nó có thể cung cấp cho bạn toàn bộ QueryString để cất cánh của url đầy đủ nếu đó là những gì bạn đang sau?

Bạn cũng có thể thực hiện một Server.MapPath trên trang và sau đó sử dụng đối tượng FileInfo để xem các phần khác nhau của tệp.

0

Check-out System.Uri lớp. Nó sẽ phân tích url của bạn thành các đoạn.

0

Bạn đã xem là sử dụng UriBuilder ... see stack over question 479799

Sử dụng mà đầu tiên sau đó chia ra các tài sản .Path

+0

UriBuilder chỉ hữu ích nếu bạn cần sửa đổi một phần của URI sau khi nó được tạo. Trong trường hợp này, có vẻ như Uri sẽ chỉ đọc. – dahlbyk

0

Điều này có vẻ giống như một trường hợp tốt để sử dụng System.Uri:

Uri uri = new Uri("example.com/page?a=1&ret=/user/page2"); 
System.Windows.Forms.MessageBox.Show(
"Absolute URI: " + uri.AbsoluteUri + "\r\n" + 
"Absolute Path: " + uri.AbsolutePath + "\r\n" + 
"Local path: " + uri.LocalPath + "\r\n" + 
"Host: " + uri.Host + "\r\n" + 
"Port: " + uri.Port + "\r\n" + 
"Query: " + uri.Query + "\r\n"); 
5

Giả sử bạn có nghĩa là bạn muốn nhận bit "page2":

var ub = new UriBuilder("example.com/page?a=1&ret=/user/page2"); 
NameValueCollection nvc = HttpUtility.ParseQueryString(ub.Query); 
string page = nvc[nvc.Count - 1]; // gets "/user/page2" 

Sau đó, bạn sẽ phải sử dụng chia phần còn lại.

Chỉnh sửa: Vâng, bạn có thể sử dụng System.IO.Path.GetFileNameWithoutExtension (trang) để trả về "page2", nhưng tôi không chắc nó có phù hợp với tôi hay không.

System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2") cũng trả về "page2".

+0

Tôi sẽ sử dụng nvc ["ret"] thay vì chỉ mục số, nhưng có HttpUtility.ParseQueryString là một phương pháp tốt để biết. – dahlbyk

0

bạn cũng có thể cân nhắc sử dụng API Routing buit trong ASP.net 2.0 mà sẽ cung cấp cho bạn kiểm soát hạt mịn trên đường URL của bạn

2

Đây có phải là một dự án ASP.NET? Trong HttpHandler của bạn/trang bạn chỉ có thể sử dụng đối tượng Request:

string path = HttpContext.Request.Path; 

Nếu bạn không có một HttpContext, System.Uri mang đến cho bạn một cái gì đó tương tự:

string path = new Uri("example.com/page?a=1&ret=/user/page2").AbsolutePath; 
Các vấn đề liên quan