Search code examples
c#asp.net-2.0query-string

Whats the quickest way to dedupe a querystring in C# (ASP.net)


I have an issue whereby the company uses a business tracking system that captures a users first visit and redirects them to the page they were trying to visit but with a refferer URL attached... Now as the referer URL carries the url that the person was trying to visit (dont ask why, Ive no idea) it causes me to have a duplicate of every value.

So visiting this...

home.aspx?test=test&test2=test2

becomes

home.aspx?test=test&test2=test2&referrerurl=home.aspx?test=test&test2=test2

Now, URL Encoding the referrer would sort the issue but i've more chance of being molested by a gorilla; so the question stands. How do I dedupe the output from .QueryString ?

Currently I'm using this ...

private string queryClean(string entity)
{
    try
    {
        if(Request.QueryString["referrerUrl"] != null){
        string[] Split = entity.Split(new Char[] { ',' });
        string tmpValue = Convert.ToString(Split[0]);

        return tmpValue;
        }else{ return entity; }
    }
    catch (Exception cleanError) 
    { 
        errors.Text += "-clean-" + cleanError + "-endclean-";
        return entity;
    }

}

(ignore the try/catch we have app level error catching, but I'm still playing with it).

I'm using C# .net 2

Thanks


[Additional Info]

The reffererURL will always be on the end of the string so it could be possible to delete all of the query string after this point?

I've tried using

string test = Convert.ToString(Request.QueryString);
string[] tRSplit = Regex.Split(test, "&referrerUrl");
Response.Write(tRSplit[0]);

and...

System.Collections.Generic.List<string> testb = new System.Collections.Generic.List<string>(Convert.ToString(Request.QueryString).Split('&'));
            for (int i = 0; i < testb.Count; i++)
            {

                Response.Write(i +": "+ testb[i].ToString()+"<br><br>");
            }

Both still produce the duplicates


I could use Trim But is there a cleaner/faster way of achieving this.


Solution

  • [Example URL]

    Default2.aspx?test=test&test2=test2&referrerURL=http://www.test.com/home.aspx?test=test&test=test

    [This Would Produce]

    test=test
    test=test
    test2=test2
    referrerURL=http://www.test.com/home.aspx?test=test

    [So an edited version of gustafc's answer...]

        //Capture the raw url
        test = Request.RawUrl.ToString();
        //Set the start index as 1 after the query ?
        int startTxt = (test.IndexOf("?") + 1);
        //Find the number of characters between ? and &referrerURL
        int countTxt = ((test.IndexOf("&referrerURL")-1) - test.IndexOf("?"));
        //Capture the substring and split into a string array using &
        string[] aTest = test.Substring(startTxt, countTxt).Split(new Char[] { '&' });
    

    [Running a test produces the following]

    -0~test=test

    -1~test2=test2

    [Which is what I expected to recieve]

    (for completeness heres the simple for statement)

        for (int i = 0; i < aTest.Length; i++)
        {
            Response.Write("<br>-" + i + "~" + Convert.ToString(aTest[i]) + "<br>");
        }