2009-06-22 18 views
8

Mam adres URL podobny do example.com/page?a=1&ret=/user/page2.URL podzielony na C#?

Używałem string.split ('/') do określenia ścieżek, ale w tym przypadku widać, że nie jest zbyt użyteczny. Jak podzielić adres URL, aby uzyskać ścieżkę do strony?

Odpowiedz

25

Jeśli się obiekt System.Uri z Twojego ciąg będzie mieć kilka właściwości dla różnych częściach ścieżce:

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

Myślę, że on chce trochę STR.2 , ponieważ mówi, że znowu podzielił się na "?" ... –

4

Obiekt Request.Url (Uri) ma wiele przydatnych właściwości związanych ze ścieżką. Może dać ci cały QueryString, aby zdjąć pełny adres URL, jeśli tego właśnie szukasz?

Możesz także wykonać Server.MapPath na samej stronie, a następnie użyć obiektu FileInfo do wyświetlenia różnych części samego pliku.

0

odjazdu klasa System.Uri. Przetworzy Twój adres URL na fragmenty.

0

Czy uważane za pomocą UriBuilder ... zobacz stack over question 479799

obsłudze, że najpierw następnie podzielić się właściwość .Path

+0

UriBuilder jest użyteczny tylko wtedy, gdy trzeba zmodyfikować część identyfikatora URI po jego utworzeniu. W tym przypadku wygląda na to, że Uri będzie tylko do odczytu. – dahlbyk

0

to wydaje się dobrym przypadku korzystania 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

Zakładając, że chcesz uzyskać 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" 

Potem będziesz musiał użyć podziału na resztę.

Edycja: Cóż, możesz użyć System.IO.Path.GetFileNameWithoutExtension (strona), aby powrócić "page2", ale nie jestem pewien, czy jest to dla mnie właściwe.

System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2") zwraca również "page2".

+0

Używałbym nvc ["ret"] zamiast indeksu liczbowego, ale tak HttpUtility.ParseQueryString jest dobrą metodą do poznania. – dahlbyk

0

można również rozważyć użycie API Routing buit wewnątrz ASP.NET 2.0, który daje precyzyjną kontrolę nad swoimi drogami szczegółową URL

2

Czy ten projekt ASP.NET? W swojej HttpHandler/stronie można po prostu użyć obiektu request:

string path = HttpContext.Request.Path; 

Jeśli nie masz HTTPContext, System.Uri daje coś podobnego:

string path = new Uri("example.com/page?a=1&ret=/user/page2").AbsolutePath;