Начните с использования UriBuilder (см. Ответ Драйса).
Для анализа свойства запроса используйте:
NameValueCollection q=HttpUtility.ParseQueryString(uri.Query);
На самом деле вы получаете HttpValueCollection (internal), поэтому при последующем вызове q.ToString () вы получите обратно закодированную строку запроса url.
Так как класс внутренний, вам нужно позвонить
NameValueCollection q=HttpUtility.ParseQueryString("");
, если вы хотите построить строку запроса с нуля.