Ajouter des paramètres à une url

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 346 fois - Téléchargée 28 fois

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

Ajouter un commentaire

Commentaires

Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

Merci j'ai fait une rapide transcription des méthodes en C#.

/// <summary>
/// Rajoute des paramètres à l'url en cour
/// </summary>
/// Collection de paires de clés valeurs

/// <returns>l'url avec les nouveaux paramètres</returns>
/// <remarks></remarks>
public static string AddParameterToUrl(Dictionary<string, object> Dicos)
{

StringBuilder sb = new StringBuilder();

//on verifie qu'il existe une requete
if (System.Web.HttpContext.Current != null)
{
HttpRequest Request = System.Web.HttpContext.Current.Request;

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

if (Dicos != null && Dicos.Count > 0)
{
sb.Append("?");

//on rajoute les params de notre dicos
foreach (KeyValuePair<string, object> Def in Dicos)
{
sb.AppendFormat("{0}={1}&", Def.Key, HttpUtility.UrlEncode((String)Def.Value));
}
//on rajoute les params qui etaient déjà dans l'url
foreach (String key in Request.QueryString.Keys)
{
//Si dicos possede la valeur alors on l'a déjà ajouté
object obj;
if (!Dicos.TryGetValue(key, out obj))
{
sb.AppendFormat("{0}={1}&", key, Request.QueryString[key]);
}
}
}
else
{
//c'est pas parce que dico est vide qu'on doit pas mettre les anciens paramètres
foreach (String key in Request.QueryString.Keys)
{
sb.AppendFormat("{0}={1}&", key, Request.QueryString[key]);
}
}
}
else
{
throw new System.Web.HttpException("Request is nothing");
}
// On enleve le & de fin si présent
if (sb.ToString().EndsWith("&"))
return sb.ToString().Remove(sb.ToString().Length - 1);
else
return sb.ToString();
}

/// <summary>
/// Rajoute des paramètres à l'url en cours
/// </summary>
/// Dictionnaire contenant la valeur a réjouté

/// <returns>l'url avec les nouveaux paramètres</returns>
/// <remarks></remarks>
public static string AddParameterToUrl(KeyValuePair<string, Object> valuePair)
{
Dictionary<string, Object> dicos = new Dictionary<string, object>();
dicos.Add(valuePair.Key, valuePair.Value);
return AddParameterToUrl(dicos);
}

/// <summary>
/// Rajoute des paramètres à l'url en cours
/// </summary>
/// clé à rajouter

/// valeur a rajouté

/// <returns>l'url avec les nouveaux paramètres</returns>
/// <remarks></remarks>
public static string AddParameterToUrl(String key, String value)
{
Dictionary<String, Object> dicos = new Dictionary<string, object>();
dicos.Add(key, value);
return AddParameterToUrl(dicos);
}

/// <summary>
/// Retourne l'url sans les paramètres querystring
/// </summary>
/// <returns></returns>
/// <remarks></remarks>
public static string GetPathAndScriptOnly()
{
if (System.Web.HttpContext.Current != null)
{
String TmpPathAndScript = System.Web.HttpContext.Current.Request.ServerVariables["script_name"] + "";
if (TmpPathAndScript.IndexOf("//") > 0)
{
TmpPathAndScript = TmpPathAndScript.Replace("//", "/");
}

return TmpPathAndScript;
}
else
{
throw new System.Web.HttpException("Request is nothing");
}
}
Messages postés
54
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
6 mai 2007

Salut,
Merci, je cherchais justement une petite source dans ce contexte.

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.