web-dev-qa-db-fra.com

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 de celui-ci. 

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

168
Rocky Singh

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.

122
Josh

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 l'URL propre C # ASP.net

345
Johnny Oshika

Ceci est ma solution:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);
35
Kolman
Request.RawUrl.Split(new[] {'?'})[0];
33
tyy

Bonne réponse également trouvée ici source de réponse

Request.Url.GetLeftPart(UriPartial.Path)
28
Abdelfattah Ragab

Ma façon:

new UriBuilder(url) { Query = string.Empty }.ToString()

ou

new UriBuilder(url) { Query = string.Empty }.Uri
13
Sat

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 pour vous donner exactement ce que vous voulez, mais vous pouvez les combiner vous-même.

10
Brandon

Voici une méthode d'extension utilisant la réponse de @ Kolman. Il est légèrement plus facile de se rappeler d'utiliser Path () que GetLeftPart. Vous voudrez 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&param2=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);
        }
    }
}
3
stevieg

Split () Variation

Je veux juste ajouter cette variante pour référence. Les URL sont souvent des chaînes et il est donc plus simple d'utiliser la méthode Split() que Uri.GetLeftPart(). Et Split() 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 de tous ces types d'URL: 

   var path = (url ?? "").Split('?', '#')[0];

Exemple de résultat:

1
Roberto

Request.RawUrl.Split ('?') [0]

Juste pour le nom de l'URL seulement !!

Solution pour Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
0
Shaman
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];
0
Padam Singh

un exemple simple consisterait à utiliser une 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("?"));
0
Paras

J'ai créé une extension simple, car quelques-unes des autres réponses ont jeté des exceptions nulles s'il n'y avait pas de 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() 
0
Sam Jones