Get the query string right
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.