public static string SetQueryParam(this string url, string key, string val)
{
if (string.IsNullOrEmpty(url)) return null;
var qsPos = url.IndexOf('?');
if (qsPos != -1)
{
var existingKeyPos = url.IndexOf(key, qsPos, StringComparison.InvariantCulture);
if (existingKeyPos != -1)
{
var endPos = url.IndexOf('&', existingKeyPos);
if (endPos == -1) endPos = url.Length;
var newUrl = url.Substring(0, existingKeyPos + key.Length + 1)
+ val.UrlEncode()
+ url.Substring(endPos);
return newUrl;
}
}
var prefix = qsPos == -1 ? "?" : "&";
return url + prefix + key + "=" + val.UrlEncode();
}