public string GetLeftPart (UriPartial part)
{
EnsureAbsoluteUri ();
int defaultPort;
switch (part) {
case UriPartial.Scheme :
return scheme + GetOpaqueWiseSchemeDelimiter ();
case UriPartial.Authority :
if ((scheme == Uri.UriSchemeMailto) || (scheme == Uri.UriSchemeNews))
return String.Empty;
StringBuilder s = new StringBuilder ();
s.Append (scheme);
s.Append (GetOpaqueWiseSchemeDelimiter ());
if (path.Length > 1 && path [1] == ':' && (Uri.UriSchemeFile == scheme))
s.Append ('/'); // win32 file
if (userinfo.Length > 0)
s.Append (userinfo).Append ('@');
s.Append (host);
defaultPort = GetDefaultPort (scheme);
if ((port != -1) && (port != defaultPort))
s.Append (':').Append (port);
return s.ToString ();
case UriPartial.Path :
StringBuilder sb = new StringBuilder ();
sb.Append (scheme);
sb.Append (GetOpaqueWiseSchemeDelimiter ());
if (path.Length > 1 && path [1] == ':' && (Uri.UriSchemeFile == scheme))
sb.Append ('/'); // win32 file
if (userinfo.Length > 0)
sb.Append (userinfo).Append ('@');
sb.Append (host);
defaultPort = GetDefaultPort (scheme);
if ((port != -1) && (port != defaultPort))
sb.Append (':').Append (port);
if (path.Length > 0) {
#if NET_2_0
switch (Scheme) {
case "mailto":
case "news":
sb.Append (path);
break;
default:
sb.Append (Reduce (path, CompactEscaped (Scheme)));
break;
}
#else
sb.Append (path);
#endif
}
return sb.ToString ();
}
return null;
}