title: Alternative to .NET's Uri implementation?
body: <p>I have a problem with the .NET's Uri implementation. It seems that if the scheme is "ftp", the query part is not parsed as a Query, but as a part of the path instead. </p>
  
  <p>Take the following code for example:</p>
  
  <pre><code>Uri testuri = new Uri("ftp://user:pass@localhost/?passive=true");
  Console.WriteLine(testuri.Query); // Outputs an empty string
  Console.WriteLine(testuri.AbsolutePath); // Outputs "/%3Fpassive=true"
  </code></pre>
  
  <p>It seems to me that the Uri class wrongfully parses the query part as a part of the path. However changing the scheme to http, the result is as expected:</p>
  
  <pre><code>Uri testuri = new Uri("http://user:pass@localhost/?passive=true");
  Console.WriteLine(testuri.Query); // Outputs "?passive=true"
  Console.WriteLine(testuri.AbsolutePath); // Outputs "/"
  </code></pre>
  
  <p>Does anyone have a solution to this, or know of an alternative Uri class that works as expected?</p>