URL split in C#?
j'ai une url comme example.com/page?a=1&ret=/user/page2
.
j'utilisais string.split('/') pour déterminer les chemins, mais ce cas vous pouvez le voir, il n'est pas très utile. Comment partager L'URL pour obtenir le chemin de la page?
9 réponses
si vous fabriquez un système.Objet Uri de votre chaîne, il aura plusieurs propriétés pour différentes parties du chemin:
string path = "http://example.com/page?a=1&ret=/user/page2";
Uri uri = new Uri(path);
Console.WriteLine(uri.AbsolutePath); // Prints "/page"
si vous voulez dire que vous voulez obtenir le bit" pagee2":
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"
vous devrez utiliser split pour le reste.
Edit: eh Bien, vous pouvez utiliser le Système.IO.Chemin d'accès.GetFileNameWithoutExtension(page) pour revenir "page2", mais je ne suis pas sûr qu'il se sent le droit pour moi.
System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2")
retourne aussi "page2".
La Demande.L'objet Url (Uri) a beaucoup de propriétés utiles relatives au chemin. Il peut vous donner toute L'interrogation pour enlever l'url complète si c'est ce que vous cherchez?
vous pouvez également effectuer un serveur.MapPath sur la page elle-même et ensuite utiliser L'objet FileInfo pour visualiser diverses parties du fichier lui-même.
vous pouvez le charger dans un URI objet et obtenir le Uri.Cheminabsolu "151920920 de la propriété".
est-ce un ASP.NET projet? Dans votre HttpHandler / Page vous pouvez simplement utiliser l'objet Request:
string path = HttpContext.Request.Path;
si vous n'avez pas de HttpContext, système.Uri vous donne quelque chose de similaire:
string path = new Uri("example.com/page?a=1&ret=/user/page2").AbsolutePath;
avez-vous envisagé D'utiliser L'UriBuilder... voir pile question 479799
utilisez d'abord cela, puis divisez le .Propriété Path
vous pourriez également envisager d'utiliser L'API de routage buit inside ASP.net 2.0 qui vous donnera le contrôle fin grained sur vos routes URL
cela semble comme un bon cas à utiliser 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");