using System.Collections.Specialized;
public static class UriExtensions
public static Uri WithQueryStringParameters(this Uri uri, NameValueCollection nameValueCollection)
var uriBuilder = new UriBuilder(uri);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query.Add(nameValueCollection);
uriBuilder.Query = query.ToString();
public static void Main()
var ErrorOccurred = true;
var ReturnUrl = "/connect/payment-request/redirect/f31fd48f-82b9-4e8c-8252-cca00395a92a?&redirect_uri=https%3A%2F%2Fgantu-local.stitchmoney.com%2Freturn%3Ftype%3Dinstantpay";
var ClientQueryParameters = new NameValueCollection { { "status", ErrorOccurred ? "failed" : "closed" } };
string[] ReturnUrlSections = ReturnUrl.Split('?');
NameValueCollection QueryString = HttpUtility.ParseQueryString(ReturnUrlSections[1]);
string ClientRedirectUri = QueryString["redirect_uri"] ?? string.Empty;
Uri UpdatedClientRedirect = new Uri(ClientRedirectUri).WithQueryStringParameters(ClientQueryParameters);
QueryString["redirect_uri"] = UpdatedClientRedirect.ToString();
var returnUrlOldStyle = ReturnUrl + $"&status={(ErrorOccurred ? "failed" : "closed")}";
var returnUrlNewStyle = "";
Console.WriteLine($"ClientQueryParams -> {ClientQueryParameters}");
Console.WriteLine($"ClientRedirectUri -> {ClientRedirectUri}");
Console.WriteLine($"Old concatenation version -> {returnUrlOldStyle}");
Console.WriteLine($"New dynamic version -> {returnUrlNewStyle}");