public static Uri CreateUriWithQuery(Uri uri, string query)
{
if(!String.IsNullOrEmpty(query) && !query.StartsWith("?"))
{
query = "?" + query;
}
if(String.IsNullOrEmpty(uri.Query))
{
return new Uri(uri.OriginalString + query);
}
else
{
string originalUri = uri.OriginalString;
int queryDelimPos = originalUri.LastIndexOf('?');
int compositeDelimPos = originalUri.LastIndexOf(')');
if(queryDelimPos <= compositeDelimPos)
{
// No Query or the Query is part of an inner Composite.
return new Uri(originalUri + query);
}
else
{
// Outer Uri has a Query or not a Composite Uri with a Query
string strippedUri = originalUri.Substring(0, queryDelimPos);
return new Uri(strippedUri + query);
}
}
}