public static String UrlEncode(String parameter)
{
if (string.IsNullOrEmpty(parameter))
{
return string.Empty;
}
String value = Uri.EscapeDataString(parameter);
// Uri.EscapeDataString escapes with lowercase characters, convert to uppercase
value = Regex.Replace(value, "(%[0-9a-f][0-9a-f])", c => c.Value.ToUpper());
// not escaped by Uri.EscapeDataString() but need to be escaped
value = value
.Replace("(", "%28")
.Replace(")", "%29")
.Replace("$", "%24")
.Replace("!", "%21")
.Replace("*", "%2A")
.Replace("'", "%27");
// characters escaped by Uri.EscapeDataString() that need to be sent unescaped
value = value.Replace("%7E", "~");
return value;
}