J'ai une URL comme celle-ci:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Je veux m'en sortir http://www.example.com/mypage.aspx
.
Pouvez-vous me dire comment puis-je l'obtenir?
Vous pouvez utiliser System.Uri
Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme,
Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);
Ou vous pouvez utiliser substring
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));
EDIT: Modification de la première solution pour refléter la suggestion de brillyfresh dans les commentaires.
substring
méthode donnera une erreur s'il n'y a pas de chaîne de requête. Utilisezstring path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);
plutôt.Voici une solution plus simple:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"); string path = uri.GetLeftPart(UriPartial.Path);
Emprunté ici: tronquer la chaîne de requête et renvoyer une URL propre C # ASP.net
la source
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(
est une autre méthode géniale pour obtenir des parties d'un Uri. Je ne savais pas pour ces deux jusqu'à maintenant!Voici ma solution:
la source
Request.RawUrl.Split(new[] {'?'})[0];
la source
RawUrl
l'URL sera obtenue avant la réécriture de l'URL, alors peut-être utiliserAbsoluteUri
?Request.Url.AbsoluteUri.Split('?')[0]
Bonne réponse également trouvée ici source de réponse
la source
Mon chemin:
new UriBuilder(url) { Query = string.Empty }.ToString()
ou
new UriBuilder(url) { Query = string.Empty }.Uri
la source
Uri.GetLeftPart
. La dernière version de NET Core (1.1) devrait avoir cette méthode (je ne peux pas confirmer car je ne suis pas sur le noyau net 1.1 pour le moment)Vous pouvez utiliser
Request.Url.AbsolutePath
pour obtenir le nom de la page, ainsi queRequest.Url.Authority
pour le nom d'hôte et le port. Je ne pense pas qu'il existe une propriété intégrée pour vous donner exactement ce que vous voulez, mais vous pouvez les combiner vous-même.la source
Variation Split ()
Je veux juste ajouter cette variation pour référence. Les URL sont souvent des chaînes et il est donc plus simple d'utiliser la
Split()
méthode queUri.GetLeftPart()
. EtSplit()
peut également fonctionner avec des valeurs relatives, vides et nulles alors qu'Uri lève une exception. De plus, les URL peuvent également contenir un hachage tel que/report.pdf#page=10
(qui ouvre le pdf sur une page spécifique).La méthode suivante traite tous ces types d'URL:
var path = (url ?? "").Split('?', '#')[0];
Exemple de sortie:
http: //domaine/page.html#page=2 ---> http: //domaine/page.html
page.html ---> page.html
la source
Voici une méthode d'extension utilisant la réponse de @ Kolman. Il est légèrement plus facile de se souvenir d'utiliser Path () que GetLeftPart. Vous souhaiterez peut-être renommer Path en GetPath, au moins jusqu'à ce qu'ils ajoutent des propriétés d'extension à C #.
Usage:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=bar"); string path = uri.Path();
La classe:
using System; namespace YourProject.Extensions { public static class UriExtensions { public static string Path(this Uri uri) { if (uri == null) { throw new ArgumentNullException("uri"); } return uri.GetLeftPart(UriPartial.Path); } } }
la source
System.Uri.GetComponents
, juste les composants spécifiés que vous voulez.Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"); uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Production:
http://www.example.com/mypage.aspx
la source
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"; string path = url.split('?')[0];
la source
Request.RawUrl.Split('?')[0]
Juste pour le nom de l'url seulement !!
la source
Solution pour Silverlight:
string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
la source
J'ai créé une extension simple, car quelques-unes des autres réponses ont jeté des exceptions nulles s'il n'y en avait pas
QueryString
pour commencer:public static string TrimQueryString(this string source) { if (string.IsNullOrEmpty(source)) return source; var hasQueryString = source.IndexOf('?') != -1; if (!hasQueryString) return source; var result = source.Substring(0, source.IndexOf('?')); return result; }
Usage:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
la source
un exemple simple serait d'utiliser une sous-chaîne comme:
string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"; string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));
la source
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
la source
Essaye ça:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
à partir de ceci: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye, vous obtiendrez ceci: mypage.aspx
la source
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))
la source