[c#] 将值附加到查询字符串



Answers

我将share包装成了一个很好的可重用的扩展方法。

public static class UriExtensions
{
    /// <summary>
    /// Adds the specified parameter to the Query String.
    /// </summary>
    /// <param name="url"></param>
    /// <param name="paramName">Name of the parameter to add.</param>
    /// <param name="paramValue">Value for the parameter to add.</param>
    /// <returns>Url with added parameter.</returns>
    public static Uri AddParameter(this Uri url, string paramName, string paramValue)
    {
        var uriBuilder = new UriBuilder(url);
        var query = HttpUtility.ParseQueryString(uriBuilder.Query);
        query[paramName] = paramValue;
        uriBuilder.Query = query.ToString();

        return uriBuilder.Uri;
    }
}

我希望这有帮助!

Question

我在列表中有一组类似于下面的URL

我设法使用下面的代码获取查询字符串:

myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);

foreach (string lol in qs)
{
    // results will return
}

但它只会根据提供的URL返回像id服务器位置等参数。

我需要的是添加/附加值到现有的查询字符串。

例如,使用URL:

http://somesite.com/backup/index.php?action=login&attempts=1

我需要改变查询字符串参数的值:

行动= login1

尝试= 11

正如你所看到的,我为每个值添加了“1”。 我需要从一个字符串中获取一组具有不同查询字符串的URL,并在每个参数末尾添加一个值,并再次将它们添加到列表中。




以下解决方案适用于ASP.NET 5(vNext),它使用QueryHelpers类来构建带有参数的URI。

    public Uri GetUri()
    {
        var location = _config.Get("http://iberia.com");
        Dictionary<string, string> values = GetDictionaryParameters();

        var uri = Microsoft.AspNetCore.WebUtilities.QueryHelpers.AddQueryString(location, values);
        return new Uri(uri);
    }

    private Dictionary<string,string> GetDictionaryParameters()
    {
        Dictionary<string, string> values = new Dictionary<string, string>
        {
            { "param1", "value1" },
            { "param2", "value2"},
            { "param3", "value3"}
        };
        return values;
    }

结果URI将具有http://iberia.com?param1=value1&param2=value2&param3=value3




请注意,您可以添加Microsoft.AspNetCore.WebUtilities nuget包,然后使用它将值追加到查询字符串:

QueryHelpers.AddQueryString(longurl, "action", "login1")
QueryHelpers.AddQueryString(longurl, new Dictionary<string, string> { { "action", "login1" }, { "attempts", "11" } });



Links