Skip to main content

ASP.NET QueryString


You want to see how to use the QueryString collection in the ASP.NET web development framework. Almost all examples show one way of using this NameValueCollection, but there are faster and more logical ways. This short information sheet has some examples and tips with QueryString, using the C# programming language.

Example 1

Here we see an .aspx Web Forms page that executes when the user accesses Default.aspx. The code here is the code-behind part, Default.aspx.cs, and it is written in the C# programming language. To test the above code, run the page in the web browser on the ASP.NET development server. It will be completely blank. Try adding the string "?param=dotnet" at the end of the URL.
QueryString example [C#]

using System;
using System.Web.UI;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 string v = Request.QueryString["param"];
 if (v != null)
 {
     Response.Write("param is ");
     Response.Write(v);
 }
    }
}

Program result
    It prints value of param query.
    The screenshot shows the result.
Testing query string in ASP.NET page

Two query string parameters

Here we see how you can test two query string URL parameters. Another common requirement is to test two different query strings. You may have to use either one or both at once. The next example here has some inefficiencies, but it works well otherwise.
QueryString example with multiple parameters [C#]

using System;
using System.Web.UI;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 string v = Request.QueryString["param"];
 if (v != null)
 {
     Response.Write("param is ");
     Response.Write(v);
 }
 string x = Request.QueryString["id"];
 if (x != null)
 {
     Response.Write("   id detected");
 }
    }
}

Test code with this url:

?param=first&id=true
Testing the code. Try the above example code by typing, at the end of the URL in Internet Explorer or Firefox, the test url. The above string specifies that the "param" query is equal to "first", while the "id" param is equal to "true". Always be careful with the "id" query string, as Google's spiders may avoid it.
Query string usage example

Advanced example

The Request.QueryString collection is a NameValueCollection internally. QueryString is implemented as a property getter for an internal NameValueCollection. The NameValueCollection is a specialized collection that has a somewhat unusual implementation. MSDN describes it as a "collection of associated String keys and String values that can be accessed either with the key or with the index."
msdn.microsoft.com
Testing the QueryString collection. My testing indicates that using the index to access a value in NameValueCollection is far faster than using the ["string"] syntax.
Page that uses HasKeys() on QueryString [C#]

using System;
using System.Web.UI;
using System.Collections.Specialized;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 // 1
 // Get collection
 NameValueCollection n = Request.QueryString;
 // 2
 // See if any query string exists
 if (n.HasKeys())
 {
     // 3
     // Get first key and value
     string k = n.GetKey(0);
     string v = n.Get(0);
     // 4
     // Test different keys
     if (k == "param")
     {
  Response.Write("param is " + v);
     }
     if (k == "id")
     {
  Response.Write("id is " + v);
     }
 }
    }
}
Overview. In step one, this code gets a reference to the QueryString collection. In high-performance code, you want to avoid excessive property lookups.
Next steps in the code. In step two, we use the HasKeys() method on QueryString. This is very useful for telling whether there are any query string keys available on the URL. In step four, we do two lookups on the NameValueCollection to get the very first key and the very first value. Because we only access the first key and value, this code doesn't work for more than one key value pair.

NameValueCollection

This article is really more about NameValueCollection than QueryString, as QueryString is simply an instance of NameValueCollection. You can find more detailed information about this collection on this site.
NameValueCollection Usage

Optimizations

Here I benchmarked the query string code examples. The benchmark simply reads the very first query string key/value pair from the URL. My requirement was to accept only the first query string on a page.
Example that uses HasKeys()... [Method A] [C#]

using System;
using System.Web;
using System.Web.UI;
using System.Collections.Specialized;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 HttpRequest q = Request;
 NameValueCollection n = q.QueryString;
 if (n.HasKeys())
 {
     string k = n.GetKey(0);
     if (k == "one")
     {
  string v = n.Get(0);
     }
     if (k == "two")
     {
  string v = n.Get(0);
     }
 }
    }
}

Example that uses QueryString["key"] syntax... [Method B] [C#]

using System;
using System.Web;
using System.Web.UI;
using System.Collections.Specialized;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 HttpRequest q = Request;
 string v = q.QueryString["one"];
 if (v != null)
 {
 }
 v = q.QueryString["two"];
 if (v != null)
 {
 }
    }
}
Discussion. What we see is that when you only need to access the first query string key/value pair, using HasKeys(), Get(), and GetKey() is lots faster than the QueryString["string"] approach.
No query string

Method A: 0.08 s
Method B: 1.75 s

Matching query string

Method A: 0.45 s
Method B: 2.80 s

No matching query string

Method A: 0.46 s
Method B: 1.73 s
Question mark

Is QueryString filled lazily?

No. I found that by the time your HttpRequest is being used, the QueryString collection has already been initialized with all the query key/value pairs. I looked at the locals in the Visual Studio debugger to find this. Therefore, the analysis in this article is correct and the faster method shown is really considerably faster than the naive approach.
Visual Studio Debugging Tutorial

Notes

When you use QueryString in Global.asax or another "hot" path in your code, it pays to optimize the logic. When your website runs the code several times each second, you need it to be as fast as possible.

Summary

We saw several examples of Request.QueryString, using the same code pattern that most ASP.NET tutorials use. However, we also noted how you can use other methods on QueryString to gain a substantial performance increase.

Comments

Popular posts from this blog

Tip/Trick: Fix Common SEO Problems Using the URL Rewrite Extension

Search engine optimization (SEO) is important for any publically facing web-site.  A large % of traffic to sites now comes directly from search engines, and improving your site’s search relevancy will lead to more users visiting your site from search engine queries.  This can directly or indirectly increase the money you make through your site. This blog post covers how you can use the free Microsoft  URL Rewrite Extension  to fix a bunch of common SEO problems that your site might have.  It takes less than 15 minutes (and no code changes) to apply 4 simple  URL Rewrite  rules to your site, and in doing so cause search engines to drive more visitors and traffic to your site.  The techniques below work equally well with both ASP.NET Web Forms and ASP.NET MVC based sites.  They also works with all versions of ASP.NET (and even work with non-ASP.NET content). [In addition to blogging, I am also now using Twitter for quick updates and to sh...

ASP.NET MVC - Set custom IIdentity or IPrincipal

Here's how I do it. I decided to use IPrincipal instead of IIdentity because it means I don't have to implement both IIdentity and IPrincipal. Create the interface interface ICustomPrincipal : IPrincipal { int UserId { get ; set ; } string FirstName { get ; set ; } string LastName { get ; set ; } } CustomPrincipal public class CustomPrincipal : ICustomPrincipal { public IIdentity Identity { get ; private set ; } public bool IsInRole ( string role ) { return false ; } public CustomPrincipal ( string email ) { this . Identity = new GenericIdentity ( email ); } public int UserId { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } } CustomPrincipalSerializeModel - for serializing custom information into userdata field in FormsAuthenticationTicket object. public class CustomPrincipalSerializeMode...

How to create a countdown timer in jquery

Create a countdown timer in jQuery First we need to include the jQuery library file to the HTML page to perform this task. To do that we need to understand that what exactly a jQuery library fie is ? JQuery library file is the library of JavaScript, which means this file contains the predefined functions of jQuery. We just need to call these functions to perform the task. jQuery functions reduces the lines of code and makes our task easy. As this jQuery library file contains the javascript functions so we need to call the function within <script> </script> tag. Now after including the file, we need to define a variable which will store that for how long you want the timer on the page(c=60) and now the time you set needs to be changed in hours , minutes and seconds using the code “ var hours = parseInt( time / 3600 ) % ;var minutes = parseInt( time / 60 ) % 60; var seconds = time % 60;” Now we need to put the condition if timer got finished (if (t...