Jan 17, 2007 Today, I ran into a strange little issue regarding the System.Uri class
that took me too long to figure out. The Uri class has a property called Query that, according to the documentation, returns everything from the "?" to the end of
the URI.
Consider this unescaped URI:
string url
= "http://www.google.com/search?q=httpcompression
c# asp.net";
string query
= new Uri(url).Query;
The Uri.Query on
that URI returns q=httpcompression c. As you can see, it breaks when it encounters
a "#" character, so it doesn’t return everything from the "?" to the end. If the URI
was escaped or UrlEncoded, there would have been no problem because the "#" character
would be encoded into "%23". The problem is, that in this particular case I had to
deal with unescaped URIs.
So to make the above code work properly, the simplest way was to do exactly what the
documentation for the URI.Query says: Return everything from the question mark
to the end of the URI. That lead to the following helper method.
string url
= "http://www.google.com/search?q=httpcompression
c# asp.net";
string query
= ExtractQuery(url);
public static string ExtractQuery(string url)
{
if (string.IsNullOrEmpty(url))
return string.Empty;
int index
= url.IndexOf("?")
+ 1;
if (index
== 0)
return string.Empty;
return url.Substring(index);
}
>>
It’s not bad or ugly in any way, but it is annoying and also frustrating that the
documentation isn’t correct either.
* Only $4.95/month ASP.NET & Windows 2008 + IIS 7 Hosting! FREE SQL Included