creates text data suitable for application/x-www-form-urlencoded
// Usage:
// var query = ConstructQueryData(
// "param1", "value1",
// "param2", "value2",
// "param3", "value=with#escape");
// -> query: "param1=value1¶m2=value2¶m3=value%3Dwith%23escape"
public static string ConstructQueryData(params string[] keyValArray) {
if (keyValArray == null) {
return string.Empty;
}
int itemCount;
if (keyValArray.Length % 2 == 0) {
itemCount = keyValArray.Length / 2;
}
else {
itemCount = (keyValArray.Length + 1) / 2;
}
var escapedKeyValArray = new string[itemCount];
for (var i = 0; i < keyValArray.Length; i += 2) {
var rawKey = keyValArray[i] ?? string.Empty;
string rawVal;
if (i + 1 < keyValArray.Length) {
rawVal = keyValArray[i + 1] ?? string.Empty;
}
else {
rawVal = string.Empty;
}
var key = Uri.EscapeDataString(rawKey);
var val = Uri.EscapeDataString(rawVal);
escapedKeyValArray[i / 2] = string.Format("{0}={1}", key, val);
}
return string.Join("&", escapedKeyValArray);
}