/// <summary> /// Provides the path string escaped in a way which is correct for combining into the URI representation. /// </summary> /// <returns>The escaped path value</returns> public string ToUriComponent() { if (!HasValue) { return(string.Empty); } StringBuilder buffer = null; var start = 0; var count = 0; var requiresEscaping = false; var i = 0; while (i < _value.Length) { var isPercentEncodedChar = PathStringHelper.IsPercentEncodedChar(_value, i); if (PathStringHelper.IsValidPathChar(_value[i]) || isPercentEncodedChar) { if (requiresEscaping) { // the current segment requires escape if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } buffer.Append(Uri.EscapeDataString(_value.Substring(start, count))); requiresEscaping = false; start = i; count = 0; } if (isPercentEncodedChar) { count += 3; i += 3; } else { count++; i++; } } else { if (!requiresEscaping) { // the current segument doesn't require escape if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } buffer.Append(_value, start, count); requiresEscaping = true; start = i; count = 0; } count++; i++; } } if (count == _value.Length && !requiresEscaping) { return(_value); } else { if (count > 0) { if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } if (requiresEscaping) { buffer.Append(Uri.EscapeDataString(_value.Substring(start, count))); } else { buffer.Append(_value, start, count); } } return(buffer.ToString()); } }
/// <summary> /// Provides the path string escaped in a way which is correct for combining into the URI representation. /// </summary> /// <returns>The escaped path value</returns> public string ToUriComponent() { if (!HasValue) { return(string.Empty); } StringBuilder buffer = null; var start = 0; var count = 0; var requiresEscaping = false; for (int i = 0; i < _value.Length; ++i) { if (PathStringHelper.IsValidPathChar(_value[i])) { if (requiresEscaping) { // the current segment requires escape if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } buffer.Append(Uri.EscapeDataString(_value.Substring(start, count))); requiresEscaping = false; start = i; count = 0; } count++; } else { if (!requiresEscaping) { // the current segument doesn't require escape if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } buffer.Append(_value, start, count); requiresEscaping = true; start = i; count = 0; } count++; } } if (count == _value.Length && !requiresEscaping) { return(_value); } else { if (count > 0) { if (buffer == null) { buffer = new StringBuilder(_value.Length * 3); } if (requiresEscaping) { buffer.Append(Uri.EscapeDataString(_value.Substring(start, count))); } else { buffer.Append(_value, start, count); } } return(buffer.ToString()); } }