Ajouter des paramètres à une url

Contenu du snippet

Une fonction permettant de rajouter des url à la page courante.

Il y a 3 signature différente ainsi on peut appeller la fonction en passant un dictionnaire, une keyvaluepair (un objet contenant une clé et une valeur) ou enfin 2 string contenant une valeur et une clé.

J'utilise .net 2 et les generics pour cette fonction car c'est beaucoup plus facile, mais il n'y a rien de compliqué à le rendre compatible avec .net 1.1

Je me sert enormement de cette classe pour mes customControls :)

Exemple d'utilisation :

Dans ma page j'ai ca :

Dim params As New Dictionary(Of String, Object)
params.Add("MyPostBack", Me.UniqueID)
params.Add("TabIndex", i)
lit1.text = "<a href=""" & Util.AddParameterToUrl(params) & """>Mon Texte</a>"

Dans la page si l'url est :

/Default6.aspx

la function retournera :

/Default6.aspx?MyPostBack=TabStrip1&TabIndex=1

Si de nouveau on clique sur un autre lien (vous avez remarquer que j'ai un paramètre i, donc un compteur ;))

/Default6.aspx?MyPostBack=TabStrip1&TabIndex=1

pourra me renvoyer vers

/Default6.aspx?MyPostBack=TabStrip1&TabIndex=4

et si l'on a d'autres paramètres à l'url par exemple l'url origine est

/Default6.aspx?titi=tata&toto=truc

la nouvelle adresse sera

http://localhost:1744/TestWebSite/Default6.aspx?MyPostBack=TabStrip1&TabIndex=3&titi=tata&toto=truc

Source / Exemple :


Imports System.Web
Imports System.Web.UI
Imports System.Text

Public Class Util

    ''' <summary>
    ''' Rajoute des paramètres à l'url en cour
    ''' </summary>
    ''' <param name="Dicos">Collection de paires de clés valeurs </param>
    ''' <returns>l'url avec les nouveaux paramètres</returns>
    ''' <remarks></remarks>
    Shared Function AddParameterToUrl(ByVal Dicos As Dictionary(Of String, Object)) As String

        Dim sb As New stringbuilder

        'on verifie qu'il existe une requete
        If Not System.Web.HttpContext.Current Is Nothing Then
            Dim Request As HttpRequest = System.Web.HttpContext.Current.Request

            'ajout de l'url sans les params 
            sb.Append(GetPathAndScriptOnly)

            If Not IsNothing(Dicos) AndAlso Dicos.Count > 0 Then
                sb.Append("?")

                'on rajoute les params de notre dicos
                For Each Def As KeyValuePair(Of String, Object) In Dicos
                    sb.AppendFormat("{0}={1}&", Def.Key, HttpUtility.UrlEncode(CStr(Def.Value)))
                Next

                'on rajoute les params qui etaient déjà dans l'url
                For Each key As String In Request.QueryString.Keys
                    'Si dicos possede la valeur alors on l'a déjà ajouté 
                    If Not Dicos.TryGetValue(key, Nothing) Then
                        sb.AppendFormat("{0}={1}&", key, Request.QueryString(key))
                    End If
                Next

            Else
                'c'est pas parce que dico est vide qu'on doit pas mettre les anciens paramètres
                For Each key As String In Request.QueryString.Keys
                    sb.AppendFormat("{0}={1}&", key, Request.QueryString(key))
                Next

            End If

        Else
            Throw New System.Web.HttpException("Request is nothing")
        End If

        ' On enleve le & de fin si présent
        If sb.ToString.EndsWith("&"c) Then
            Return sb.ToString.Remove(sb.ToString.Length - 1)
        Else
            Return sb.ToString
        End If
    End Function

    ''' <summary>
    ''' Rajoute des paramètres à l'url en cours
    ''' </summary>
    ''' <param name="valuePair">Dictionnaire contenant la valeur a réjouté</param>
    ''' <returns>l'url avec les nouveaux paramètres</returns>
    ''' <remarks></remarks>
    Shared Function AddParameterToUrl(ByVal valuePair As KeyValuePair(Of String, Object)) As String
        Dim dicos As New Dictionary(Of String, Object)
        dicos.Add(valuePair.Key, valuePair.Value)
        Return AddParameterToUrl(dicos)
    End Function

    ''' <summary>
    ''' Rajoute des paramètres à l'url en cours
    ''' </summary>
    ''' <param name="key">clé à rajouter</param>
    ''' <param name="value">valeur a rajouté</param>
    ''' <returns>l'url avec les nouveaux paramètres</returns>
    ''' <remarks></remarks>
    Shared Function AddParameterToUrl(ByVal key As String, ByVal value As String) As String
        Dim dicos As New Dictionary(Of String, Object)
        dicos.Add(key, value)
        Return AddParameterToUrl(dicos)
    End Function

    ''' <summary>
    ''' Retourne l'url sans les paramètres querystring
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Shared Function GetPathAndScriptOnly() As String
        If Not System.Web.HttpContext.Current Is Nothing Then
            Dim TmpPathAndScript As String = System.Web.HttpContext.Current.Request.ServerVariables("script_name") & ""
            If InStr(TmpPathAndScript, "//") > 0 Then
                TmpPathAndScript = Replace(TmpPathAndScript, "//", "/")
            End If
            Return TmpPathAndScript
        Else
            Throw New System.Web.HttpException("Request is nothing")
        End If
    End Function

End Class

Conclusion :


Pour l'instant j'ai pas vu de bug mais je ne suis pas sur d'avoir géré tous les cas.

Si vous voyez des bugs etc... merci de me le dire. Tous commentaires sont la bienvenus ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.