2009-06-22 15 views
8

Tengo una url como example.com/page?a=1&ret=/user/page2.URL dividida en C#?

Estaba usando string.split ('/') para descubrir las rutas pero en este caso puede ver que no es muy útil. ¿Cómo divido la URL para poder obtener la ruta de la página?

Respuesta

25

Si comete un objeto System.Uri de su cadena, tendrá varias propiedades para diferentes partes de la ruta:

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

Creo que quiere el bit page2 , porque él dice que se dividiría de nuevo en '?' ... –

4

El objeto Request.Url (Uri) tiene muchas propiedades útiles relacionadas con la ruta. ¿Puede darle toda la QueryString para despegar de la url completa si eso es lo que está buscando?

También puede realizar un Server.MapPath en la página y luego usar el objeto FileInfo para ver varias partes del archivo.

0

Echa un vistazo a la clase System.Uri. Analizará tu url en fragmentos.

0

Ha considerado el uso del UriBuilder ... ver stack over question 479799

uso que primero se divide la propiedad .Path

+0

UriBuilder solo es útil si necesita modificar parte del URI después de haber sido creado. En este caso, parece que el Uri sería de solo lectura. – dahlbyk

0

Este parece ser un buen caso de utilizar 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

Suponiendo que quiere decir que quiere obtener el 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" 

Luego tendrá que usar dividir en el resto.

Editar: Bueno, podría usar System.IO.Path.GetFileNameWithoutExtension (página) para devolver "página2", pero no estoy seguro de que se sienta bien para mí.

System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2") devuelve "página2" también.

+0

Usaría nvc ["ret"] en lugar de un índice numérico, pero sí HttpUtility.ParseQueryString es un buen método para saber. – dahlbyk

0

También puede considerar el uso de la API de enrutamiento dentro buit ASP.net 2.0 que le dará un control de grano fino sobre sus rutas de URL

2

Es este un proyecto ASP.NET? En su HttpHandler/Página puede simplemente usar el objeto Request:

string path = HttpContext.Request.Path; 

Si usted no tiene un HttpContext, System.Uri le da algo similar:

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