54 votes

Tronquer la chaîne de requête et renvoyer une URL propre C# ASP.net

Je voudrais prendre l'URL d'origine, tronquer les paramètres de la chaîne de requête et renvoyer une version nettoyée de l'URL. J'aimerais que cela se produise dans l'ensemble de l'application, donc l'idéal serait d'utiliser le fichier global.asax. En outre, je pense qu'une redirection 301 serait également nécessaire.

ie.

dans : www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media

out : www.website.com/default.aspx

Quelle serait la meilleure façon d'y parvenir ?

120voto

Rob Levine Points 20793

System.Uri est votre ami ici. Il contient de nombreux utilitaires utiles, mais celui que vous voulez est GetLeftPart :

 string url = "http://www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media";
 Uri uri = new Uri(url);
 Console.WriteLine(uri.GetLeftPart(UriPartial.Path));

Cela donne la sortie : http://www.website.com/default.aspx

[La classe Uri exige que le protocole, http://, soit spécifié].

GetLeftPart dit en gros "récupérer la partie gauche de l'uri jusqu'à et y compris la partie que je spécifie". Il peut s'agir de Scheme (juste la partie http://), de Authority (la partie www.website.com ), Path (la partie /default.aspx) ou Query (la chaîne de requête).

En supposant que vous êtes sur une page web aspx, vous pouvez alors utiliser Response.Redirect(newUrl) pour rediriger l'appelant.

J'espère que cela vous aidera.

0 votes

Voici ce que nous avons finalement trouvé : //début du mauvais formatage string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl) ; if (rawUrl.Contains("/post/")) { bool hasQueryStrings = Request.QueryString.Keys. Count > 1 ; if (hasQueryStrings) { Uri uri = new Uri(rawUrl) ; rawUrl = uri.GetLeftPart(UriPartial.Path) ; HtmlLink canonical = new HtmlLink() ; canonical.Href = rawUrl ; canonical.Attributes["rel"] = "canonical" ; Page.Header.Controls.Add(canonical) ; } }. } Suivi d'une fonction permettant de récupérer correctement l'URL de l'application. Cela fonctionne parfaitement.

0 votes

@Rob Levine : Uri.GetLeftPart va en fait récupérer la partie gauche de l'URL contenant (c'est-à-dire jusqu'à ) la partie spécifiée. S'il a seulement jusqu'à la partie spécifiée, il s'arrêterait juste avant la partie entière que vous vouliez.

1 votes

@Suncat2000 - maintenant clarifié dans le texte ci-dessus - merci

8voto

Farooq Kaiser Points 229

Voici une astuce simple

Dim uri = New Uri(Request.Url.AbsoluteUri)

dim reqURL = uri.GetLeftPart(UriPartial.Path)

2voto

calmcajun Points 79

Voici un moyen rapide d'obtenir le chemin de la racine sans le chemin complet et la requête.

string path = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery,"");

0 votes

Cela supprimera également le chemin d'accès, et pas seulement la chaîne de caractères de la requête.

1voto

Chris Points 221

Cela peut sembler un peu mieux.

    string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl);

    if (rawUrl.Contains("/post/"))
    {
        bool hasQueryStrings = Request.QueryString.Keys.Count > 1;

        if (hasQueryStrings)
        {
            Uri uri = new Uri(rawUrl);
            rawUrl = uri.GetLeftPart(UriPartial.Path);

            HtmlLink canonical = new HtmlLink();
            canonical.Href = rawUrl;
            canonical.Attributes["rel"] = "canonical";
            Page.Header.Controls.Add(canonical);
        }
    }

Suivi d'une fonction permettant de récupérer correctement l'URL de l'application.

Fonctionne parfaitement.

3 votes

Cela ne devrait-il pas être bool hasQueryStrings = Request.QueryString.Keys.Count > 0 ;

0voto

DanDan Points 5523

Jetez un coup d'œil à la classe UriBuilder. Vous pouvez en créer un avec une chaîne d'url, et l'objet analysera cette url et vous permettra d'accéder uniquement aux éléments que vous souhaitez.

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