Refactored key value encoding into a separate method.

This commit is contained in:
Adrian Godong
2017-10-19 20:40:21 -07:00
parent d5caf139e9
commit 8c036b0986

View File

@@ -52,18 +52,7 @@ namespace System
valuesEnum = new string[0]; valuesEnum = new string[0];
} }
var intitialValue = string.IsNullOrWhiteSpace(bld.Query) ? "" : $"{bld.Query.TrimStart('?')}&"; var intitialValue = string.IsNullOrWhiteSpace(bld.Query) ? "" : $"{bld.Query.TrimStart('?')}&";
var sb = new StringBuilder($"{intitialValue}{key}"); bld.Query = intitialValue.AppendKeyValue(key, valuesEnum);
var validValueHit = false;
foreach(var value in valuesEnum)
{
var toSValue = value?.ToString();
if(string.IsNullOrWhiteSpace(toSValue)) continue;
// we can't just have an = sign since its valid to have query string paramters with no value;
if(!validValueHit) toSValue = "=" + value;
validValueHit = true;
sb.Append($"{toSValue},");
}
bld.Query = sb.ToString().TrimEnd(',');
return bld; return bld;
} }
@@ -111,18 +100,7 @@ namespace System
valuesEnum = new string[0]; valuesEnum = new string[0];
} }
var intitialValue = string.IsNullOrWhiteSpace(bld.Fragment) ? "" : $"{bld.Fragment.TrimStart('?')}&"; var intitialValue = string.IsNullOrWhiteSpace(bld.Fragment) ? "" : $"{bld.Fragment.TrimStart('?')}&";
var sb = new StringBuilder($"{intitialValue}{key}"); bld.Fragment = intitialValue.AppendKeyValue(key, valuesEnum);
var validValueHit = false;
foreach(var value in valuesEnum)
{
var toSValue = value?.ToString();
if(string.IsNullOrWhiteSpace(toSValue)) continue;
// we can't just have an = sign since its valid to have query string paramters with no value;
if(!validValueHit) toSValue = "=" + value;
validValueHit = true;
sb.Append($"{toSValue},");
}
bld.Fragment = sb.ToString().TrimEnd(',');
return bld; return bld;
} }
@@ -225,5 +203,23 @@ namespace System
/// <returns></returns> /// <returns></returns>
public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString()); public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString());
/// <summary>
/// Appends x-www-form-urlencoded key and valuesEnum into initialValue.
/// </summary>
private static string AppendKeyValue(this string intitialValue, string key, IEnumerable<object> valuesEnum)
{
var sb = new StringBuilder($"{intitialValue}{key}");
var validValueHit = false;
foreach(var value in valuesEnum)
{
var toSValue = value?.ToString();
if(string.IsNullOrWhiteSpace(toSValue)) continue;
// we can't just have an = sign since its valid to have query string paramters with no value;
if(!validValueHit) toSValue = "=" + value;
validValueHit = true;
sb.Append($"{toSValue},");
}
return sb.ToString().TrimEnd(',');
}
} }
} }