internal FtpUrl( string url, string scheme, string userName, string password, string host, ushort port, string path, ParametersCollection parameters, params string[] segments) : base(url, scheme, userName, password, host, (port == 0 ? (scheme == FtpUrlParser.Ssh ? FtpUrlParser.SshPort : (scheme == FtpUrlParser.Ftps ? FtpUrlParser.FtpsPort : FtpUrlParser.FtpPort)) : port)) { port = (port == 0 ? (scheme == FtpUrlParser.Ssh ? FtpUrlParser.SshPort : (scheme == FtpUrlParser.Ftps ? FtpUrlParser.FtpsPort : FtpUrlParser.FtpPort)) : port); _path = (!String.IsNullOrEmpty(path) ? path : "/"); _segments = segments ?? new string[0]; _parameters = parameters; string safePath = (_segments.Length == 0 ? String.Empty : String.Join("/", _segments.Select(segment => UrlParser.ToSafeString(segment, FtpUrlParser.PathAllowedChars)))); _asString = ToAbsoluteString( scheme, UrlParser.ToSafeString(userName, UrlParser.LoginAllowed), UrlParser.ToSafeString(password, UrlParser.LoginAllowed), host, port, safePath, _parameters); _location = _asString.Substring(scheme.Length + 1); _hashCode = _asString.GetHashCode(); }
private static string ToRelativeString(string path, ParametersCollection query = null, string fragment = null) { if (path.Length == 0) { path = "/"; } return(String.Format( "{0}{1}{2}", path, (query != null ? String.Format("?{0}", query.ToString(HttpUrlParser.PathAllowedChars)) : String.Empty), (fragment != null ? String.Format("#{0}", UrlParser.ToSafeString(fragment, HttpUrlParser.PathAllowedChars)) : String.Empty))); }
/// <inheritdoc /> protected override IpUrl CreateInstance(IEnumerable <string> segments, bool?requiresParameters = false) { StringBuilder path = new StringBuilder(Path.Length * 2); IList <string> newSegments = new List <string>(_segments.Length + 1); foreach (string segment in segments) { path.Append("/").Append(UrlParser.ToSafeString(segment, HttpUrlParser.PathAllowedChars)); newSegments.Add(segment); } string url = (_isAbsolute ? ToAbsoluteString(Scheme, Host, Port, path.ToString(), _query, _fragment) : ToRelativeString(path.ToString(), _query, _fragment)); var query = (!requiresParameters.HasValue ? null : (requiresParameters.Value ? (Query != null ? Query.Clone() : new ParametersCollection("&", "=")) : Query)); return(new HttpUrl(_isAbsolute, url, Scheme, Host, Port, path.ToString(), query, Fragment, segments.ToArray())); }
/// <inheritdoc /> protected override IpUrl CreateInstance(IEnumerable <string> segments, bool?requiresParameters = false) { StringBuilder path = new StringBuilder(Path.Length * 2); IList <string> newSegments = new List <string>(_segments.Length + 1); foreach (string segment in segments) { path.Append("/").Append(UrlParser.ToSafeString(segment, FtpUrlParser.PathAllowedChars)); newSegments.Add(segment); } var parameters = (!requiresParameters.HasValue ? null : (requiresParameters.Value ? (Parameters != null ? Parameters.Clone() : new ParametersCollection(";", "=")) : Parameters)); string url = ToAbsoluteString(Scheme, UserName, Password, Host, Port, path.ToString(), parameters); return(new FtpUrl(url, Scheme, UserName, Password, Host, Port, path.ToString(), Parameters, segments.ToArray())); }
private static string ToAbsoluteString(string scheme, string host, ushort port, string path = null, ParametersCollection query = null, string fragment = null) { string portString = (((scheme == HttpUrlParser.Https) && (port == HttpUrlParser.HttpsPort)) || (port == HttpUrlParser.HttpPort) ? String.Empty : ":" + port); if (path == null) { return(String.Format("{0}://{1}{2}/", scheme, host, portString)); } return(String.Format( "{0}://{1}{2}/{3}{4}{5}", scheme, host, portString, path, (query != null ? String.Format("?{0}", query.ToString(HttpUrlParser.PathAllowedChars)) : String.Empty), (fragment != null ? String.Format("#{0}", UrlParser.ToSafeString(fragment, HttpUrlParser.PathAllowedChars)) : String.Empty))); }
private string ToStringInternal(char[] allowedChars = null) { StringBuilder result = new StringBuilder(256); foreach (var entry in _container) { foreach (var value in entry.Value) { result.AppendFormat( "{0}{1}{2}", _separator, (allowedChars != null ? UrlParser.ToSafeString(entry.Key, allowedChars) : entry.Key), (!String.IsNullOrEmpty(value) ? String.Format("{0}{1}", _valueIndicator, (allowedChars != null ? UrlParser.ToSafeString(value, allowedChars) : value)) : String.Empty)); } } return(result.Length > 0 ? result.ToString(1, result.Length - 1) : String.Empty); }
internal HttpUrl( bool isAbsolute, string url, string scheme, string host, ushort port, string path, ParametersCollection query, string fragment, params string[] segments) : base(url, scheme, null, null, host, (port == 0 ? (scheme == HttpUrlParser.Https ? HttpUrlParser.HttpsPort : HttpUrlParser.HttpPort) : port)) { port = (port == 0 ? (scheme == HttpUrlParser.Https ? HttpUrlParser.HttpsPort : HttpUrlParser.HttpPort) : port); _isAbsolute = isAbsolute; _path = (!String.IsNullOrEmpty(path) ? path : "/"); _fragment = fragment; _segments = segments ?? new string[0]; _query = query; string safePath = (_segments.Length == 0 ? String.Empty : String.Join("/", _segments.Select(segment => UrlParser.ToSafeString(segment, HttpUrlParser.PathAllowedChars)))); if (isAbsolute) { _location = ToAbsoluteString(scheme, host, port, _path.TrimStart('/'), _query, _fragment).Substring(scheme.Length + 1); _asString = ToAbsoluteString(scheme, host, port, safePath, _query, _fragment); } else { _location = _asString = ToRelativeString("/" + safePath, _query, _fragment); } _hashCode = _asString.GetHashCode(); }