Question

I have a problem where I need to extract a query string parameter from a url. The parameter could be either "Territory" or "territory" or other upper/lower case variations of that word. Although the following works for the first two cases I wonder if there is a better way?

IDictionary<string, string> queryString = HtmlPage.Document.QueryString;

if (queryString.ContainsKey("territory"))
{
    ish.SetDefaultRegion(int.Parse(queryString["territory"]));
    // do something (the same something as below)
}
else if (queryString.ContainsKey("Territory"))
{
    ish.SetDefaultRegion(int.Parse(queryString["Territory"]));
    // do something (the same something as above)
}

I would prefer to insert the query string into the dictionary ignoring case (ie. if the user accidentally typed "TERRITORY" this code would fail, so how can I just test that the word exists regardless of casing?

Was it helpful?

Solution

Use a dictionary with a case-insensitive key comparer:

var queryParams = new Dictionary<string, string>(
    HtmlPage.Document.QueryString,
    StringComparer.InvariantCultureIgnoreCase
);

if (queryParams.ContainsKey("territory")) {
    // Covers "territory", "Territory", "teRRitory", etc.
}

OTHER TIPS

If your QueryString Object is not a dictionary object but instead is something such as a NameValueCollection...

IDictionary<string, string> queryString = QueryString.AllKeys.ToDictionary(k => k.ToLowerInvariant(), k => QueryString[k]);

Hello it can be also TeRriTory, in the querystring do a .Tolower()

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top