2009-06-22 19 views
8

Ho un URL come example.com/page?a=1&ret=/user/page2.URL suddiviso in C#?

Stavo usando string.split ('/') per calcolare i percorsi, ma in questo caso è possibile vedere che non è molto utile. Come faccio a dividere l'URL in modo da poter ottenere il percorso della pagina?

risposta

25

Se si commette un oggetto System.Uri dalla stringa, avrà diverse proprietà per le diverse parti del percorso:

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

Credo che voglia il bit page2 , perché dice che si sarebbe diviso di nuovo in "?" ... –

4

L'oggetto Request.Url (Uri) ha molte proprietà utili relative al percorso. Può darti l'intera QueryString per decollare dall'URL completo se questo è quello che cerchi?

È inoltre possibile eseguire un Server.MapPath nella pagina stessa e quindi utilizzare l'oggetto FileInfo per visualizzare varie parti del file stesso.

0

Scopri classe System.Uri. Analizzerà il tuo url in frammenti.

0

Hai pensato di usare l'UriBuilder ... vedi stack over question 479799

Usa che prima poi contempla la proprietà .Path

+0

UriBuilder è utile solo se è necessario modificare parte dell'URI dopo la sua creazione. In questo caso, sembra che l'Uri sia di sola lettura. – dahlbyk

0

Questo mi sembra un buon caso di usare 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

Supponendo vuoi dire che vuoi ottenere il 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" 

Quindi dovrai usare split sul resto.

Modifica: beh, è ​​possibile utilizzare System.IO.Path.GetFileNameWithoutExtension (pagina) per restituire "page2", ma non sono sicuro che sia giusto per me.

System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2") restituisce "pagina2" pure.

+0

Vorrei usare nvc ["ret"] piuttosto che un indice numerico, ma sì HttpUtility.ParseQueryString è un buon metodo per sapere. – dahlbyk

0

Si potrebbe anche considerare utilizzando l'API di routing all'interno buit ASP.net 2.0, che vi darà controllo a grana fine corso i percorsi URL

2

Si tratta di un progetto ASP.NET? Nella tua HttpHandler/pagina si può semplicemente utilizzare l'oggetto Request:

string path = HttpContext.Request.Path; 

Se non si dispone di un HttpContext, System.Uri ti dà qualcosa di simile:

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