Friday, January 4, 2008

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 = " c#"; 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 = " c#"; 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); }

No comments:

Post a Comment