【问题标题】:How to add or update query string parameters to given URL? [closed]如何将查询字符串参数添加或更新到给定的 URL? [关闭]
【发布时间】:2015-03-23 07:21:05
【问题描述】:

使用 C#.Net,如果 URL 不存在或者如果存在则更新当前值,我如何将查询字符串参数添加到 URL?

例如——
我有 URL - http://example.com/Test.aspx?foo=bar&id=100,我想将 foo 值更新到图表,还想将新参数添加/附加为 hello = world 和 testStatus = true 到查询字符串。


所以最终的预期输出将是 - http://example.com/Test.aspx?foo=chart&hello=world&testStatus=true&id=100

【问题讨论】:

  • 您的意思是发出 GET 请求?
  • 不,我想用查询字符串值形成 URL

标签: c# asp.net c#-4.0 c#-3.0


【解决方案1】:

我编写了以下函数来完成所需的功能:

        /// <summary>
        /// Get URL With QueryString Dynamically
        /// </summary>
        /// <param name="url">URI With/Without QueryString</param>
        /// <param name="newQueryStringArr">New QueryString To Append</param>
        /// <returns>Return Url + Existing QueryString + New/Modified QueryString</returns>
        public string BuildQueryStringUrl(string url, string[] newQueryStringArr)
        {
            string plainUrl;
            var queryString = string.Empty;

            var newQueryString = string.Join("&", newQueryStringArr);

            if (url.Contains("?"))
            {
                var index = url.IndexOf('?');
                plainUrl = url.Substring(0, index); //URL With No QueryString
                queryString = url.Substring(index + 1);
            }
            else
            {
                plainUrl = url;
            }

            var nvc = HttpUtility.ParseQueryString(queryString);
            var qscoll = HttpUtility.ParseQueryString(newQueryString);

            var queryData = string.Join("&",
                nvc.AllKeys.Where(key => !qscoll.AllKeys.Any(newKey => newKey.Contains(key))).
                    Select(key => string.Format("{0}={1}",
                        HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(nvc[key]))).ToArray());
            //Fetch Existing QueryString Except New QueryString

            var delimiter = nvc.HasKeys() && !string.IsNullOrEmpty(queryData) ? "&" : string.Empty;
            var queryStringToAppend = "?" + newQueryString + delimiter + queryData;

            return plainUrl + queryStringToAppend;
        }        

函数用法-

假设给定的 url 是 - http://example.com/Test.aspx?foo=bar&id=100
并且您想将 foo 值更改为 chart 并且还想添加新的查询字符串说 hello = world testStatus = true 然后 -

方法调用的输入:

BuildQueryStringUrl("http://example.com/Test.aspx?foo=bar&id=100",
                new[] {"foo=chart", "hello=world", "testStatus=true"});

输出: http://example.com/Test.aspx?foo=chart&hello=world&testStatus=true&id=100

希望这会有所帮助。

【讨论】:

    【解决方案2】:
    Response.Redirect("{newUrl}?param1=value&param2=value")
    

    已编辑:

    只需通过 Request.QueryString。

    Dictionary params = new Dictionary<string,string>();
    foreach (string key in Request.QueryString)
    {
        var value = Request.QueryString[key];
        //
        //Do everything you need with params
        //
        params.Add(key, value);
    }
    Response.Redirect("{newUrl}?" + string.Join("&", params.Select(x=>string.Format("{0}={1}", x.Key, x.Value))));
    

    【讨论】:

    • 我想检查查询字符串键是否已经存在/不存在,如果存在那么我想修改它。在上述解决方案中,如果 URL 已经包含查询字符串 Key,则它会重新附加。
    • 你可以通过循环Request.QueryString获取这些参数。在循环中,你可以做你需要的一切。字符串 urlParams = string.Empty; foreach(Request.QueryString 中的 var 参数){ urlParams += string.Format("{0}={1}&", param.Key, param.Value); } Response.Redirect("{newUrl}?"+urlParams);您可以使用 StringBuilder 代替字符串。
    • 但是我想用现有的 + 新的 + 修改的查询字符串参数来改造 URL。
    • 请检查我更新的评论。
    【解决方案3】:

    试试这个:

    if (Request.QueryString["ParamName"] == null)
      //redirect with param in then URL
    else
    

    使用here发布的答案

    【讨论】:

      【解决方案4】:

      以下是更新查询字符串的方法:Update Query Strings。您可以简单地检查值、更新然后重定向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 2019-09-20
        • 2020-02-04
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2012-05-17
        相关资源
        最近更新 更多