217 votes

Obtenir l'url sans chaîne de requête

J'ai une URL comme celle-ci :

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

Je veux obtenir http://www.example.com/mypage.aspx d'elle.

Pouvez-vous me dire comment je peux l'obtenir ?

411voto

Johnny Oshika Points 15580

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é d'ici : Tronquer la chaîne de requête et renvoyer une URL propre C# ASP.net

23 votes

Version à une ligne : return Request.Url.GetLeftPart(UriPartial.Path);

1 votes

uri.GetComponent( est une autre méthode géniale pour obtenir des parties d'un Uri. Je ne connaissais pas ces deux-là jusqu'à maintenant !

139voto

Josh Points 6036

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.

6 votes

Url.AbsolutePath ne renvoie que la partie chemin de l'URL (/mypage.aspx) ; ajoutez url.Scheme (http) + Uri.SchemeDelimiter (://) + url.Authority (www.somesite.com) pour obtenir l'URL complète souhaitée.

25 votes

La méthode Uri.GetLeftPart est plus simple comme mentionné stackoverflow.com/questions/1188096/

1 votes

El substring donnera une erreur s'il n'y a pas de chaîne de requête. Utilisez string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length); à la place.

43voto

Kolman Points 101

Voici ma solution :

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);

35voto

tyy Points 121
Request.RawUrl.Split(new[] {'?'})[0];

2 votes

Je l'aime juste pour le fait que vous pouvez l'utiliser sans une uri complète.

0 votes

Gardez à l'esprit que RawUrl obtiendra l'URL avant Les réécritures d'URL, donc peut-être utiliser AbsoluteUri ? Request.Url.AbsoluteUri.Split('?')[0]

11voto

Brandon Points 35624

Vous pouvez utiliser Request.Url.AbsolutePath pour obtenir le nom de la page, et Request.Url.Authority pour le nom d'hôte et le port. Je ne crois pas qu'il existe une propriété intégrée qui vous donne exactement ce que vous voulez, mais vous pouvez les combiner vous-même.

1 votes

Cela me donne /mypage.aspx , pas ce que je voulais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X