Url Manipulation (C#)
Edit (25-Mar-2005): Newer version here: Url Manipulation v2 (C#).
This class enables you to manipulate and get the QueryString of a page. It also returns the current page's AbsoluteUri (i.e. /path/to/myfile.aspx?param=test), base Url (i.e. /path/to/myfile.aspx) and virtual folder (i.e. /path/to/)
Use:
UrlQuery MyQuery;
private void Page_Load(object sender, EventArgs e) {
MyQuery = new UrlQuery("/path/to/myfile.aspx?param=test");
// or to get the current page use:
// MyQuery = new UrlQuery()
Trace.Write(MyQuery.Url); // returns '/path/to/file.aspx'
Trace.Write(MyQuery.VirtualFolder); // returns '/path/to/'
Trace.Write(MyQuery.Get()); // returns '?param=test'
// change query
MyQuery.Set("param2","value2");
Trace.Write(MyQuery.Get()); // returns '?param=test¶m2=value2'
// remove 'param' paramater
MyQuery.Set("param",null);
Trace.Write(MyQuery.Get("param2")); // returns 'value2'
Trace.Write(MyQuery.AbsoluteUri);
// go to new page
Trace.Write(MyQuery.VirtualFolder + "file2.aspx" + MyQuery.Get()); // returns '/path/to/file2.aspx?param2=value2'
}
The class 'MyQuery' is based on:
public class UrlQuery
{
/// <summary>
/// Base on current page
/// </summary>
public UrlQuery()
{
url = HttpContext.Current.Request.Url.AbsolutePath;
}
/// <summary>
/// Base on other page
/// </summary>
/// <param name="value">The url of the page to reference, i.e.: '/path/to/folder/page.aspx?param1=1¶m2=2'</param>
public UrlQuery(string value)
{
int q = value.IndexOf('?');
if (q != -1)
{
url = value.Substring(0, q);
queryString = NameValueCollection(value);
}
else
{
url = value;
}
}
private string url;
/// <summary>
/// The Url of the page, without QueryString
/// </summary>
/// <value>/path/to/folder/page.aspx</value>
public string Url
{
get
{
return url;
}
}
/// <summary>
/// Returns the virtual folder the page is in
/// </summary>
/// <value>/path/to/folder/</value>
public string VirtualFolder
{
get
{
return Url.Substring(0, Url.LastIndexOf("/") + 1);
}
}
/// <summary>
/// The AbsoluteUri
/// </summary>
/// <value>page.aspx?param1=1¶m2=2</value>
public string AbsoluteUri
{
get
{
return Url + Get();
}
}
private NameValueCollection queryString;
/// <summary>
/// Get the QueryString for the page
/// </summary>
public NameValueCollection QueryString
{
get
{
if (queryString != null)
{
return queryString;
}
else
{
queryString = new NameValueCollection(HttpContext.Current.Request.QueryString);
return queryString;
}
}
}
/// <summary>
/// Get the QueryString
/// </summary>
/// <returns>String in the format ?param1=1¶m2=2</returns>
public string Get()
{
string query = "";
if (QueryString.Count != 0)
{
query = "?";
for (int i = 0; i <= QueryString.Count - 1; i++)
{
if (i != 0)
{
query += "&";
}
query += QueryString.GetKey(i) + "=" + QueryString.Get(i);
}
}
return query;
}
/// <summary>
/// Get parameter from QueryString
/// </summary>
/// <param name="param">Parameter to get</param>
/// <returns>Parameter Value</returns>
public string Get(string param)
{
return QueryString[param];
}
/// <summary>
/// Set QueryString parameter
/// </summary>
/// <param name="param">Parameter to set</param>
/// <param name="value">Value of parameter</param>
public void Set(string param, string value)
{
if (param != string.Empty)
{
if (value == string.Empty || value == null)
{
QueryString.Remove(param);
}
else
{
QueryString[param] = value;
}
}
}
/// <summary>
/// Convert QueryString string to NameValueCollection
/// http://groups.google.co.uk/groups?hl=en&lr=&ie=UTF-8&safe=off&selm=uyMZ2oaZDHA.652%40tk2msftngp13.phx.gbl
/// </summary>
public static NameValueCollection NameValueCollection(string qs)
{
NameValueCollection nvc = new NameValueCollection();
//strip string data before the question mark
qs = qs.IndexOf('?') > 0 ? qs.Remove(0, qs.IndexOf('?') + 1) : qs;
Array sqarr = qs.Split("&".ToCharArray());
for (int i = 0; i < sqarr.Length; i++)
{
string[] pairs = sqarr.GetValue(i).ToString().Split("=".ToCharArray());
nvc.Add(pairs[0], pairs[1]);
}
return nvc;
}
/// <summary>
/// Copies a form paramater to the QueryString
/// </summary>
/// <param name="param">Form Parameter</param>
public void FormToQuery(string param)
{
this.Set(param, HttpContext.Current.Request.Form[param]);
}
}
Edit (25-Jul-2004): can pass on page url as a parameter (leave blank for current page)
Edit (27-Jul-2004): can copy a form elements value to the QueryString on postback. i.e.
void Button1_Click(object sender, EventArgs e)
{
// transfer form parameter to query
MyQuery.FormToQuery("mytextbox");
Trace.Write(MyQuery.Get());
}
Tags: CSharp, Web Developer Blog, ASP.NET
Comments
Url Manipulation v2 (C#)